home *** CD-ROM | disk | FTP | other *** search
/ Racing Games (Spidla) / zavodni.iso / Fun Racing / src / FRAppMenu.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2003-06-19  |  106.8 KB  |  3,940 lines

  1.  
  2.  
  3. #include "FRApp.h"
  4.  
  5.  
  6. void FRApp::KeyDownMainMenu(TEKeyState ulKey)
  7. {
  8.     UInt32 ulMouseX, ulMouseY;
  9.     UInt32 ulCenterY = m_usScreenHeight / 2;
  10.     
  11.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  12.  
  13.     if(ulKey == TE_MOUSE_BUTTON0)
  14.     {
  15.  
  16.         if(ulMouseY >= ulCenterY - 60 && ulMouseY <= ulCenterY - 42)
  17.             m_GameState = CAREERMENU;
  18.         else if(ulMouseY >= ulCenterY - 40 && ulMouseY <= ulCenterY - 22)
  19.             m_GameState = QUICKRACEMENU;
  20.         else if(ulMouseY >= ulCenterY - 20 && ulMouseY <= ulCenterY - 2)
  21.             m_GameState = NETWORKMENU;
  22.         else if(ulMouseY >= ulCenterY && ulMouseY <= ulCenterY + 18)
  23.             m_GameState = OPTIONSMENU;
  24.         else if(ulMouseY >= ulCenterY + 20 && ulMouseY <= ulCenterY + 38)
  25.             m_GameState = CREDITS;
  26.         else if(ulMouseY >= ulCenterY + 40 && ulMouseY <= ulCenterY + 58)
  27.         {
  28.             UnloadBSPFile();
  29.             SaveConfig();
  30.             Exit();
  31.         }
  32.     }
  33. }
  34.  
  35. void FRApp::KeyDownOptionsMenu(TEKeyState ulKey)
  36. {
  37.     UInt32 ulMouseX, ulMouseY;
  38.     UInt32 ulCenterY = m_usScreenHeight / 2;
  39.     
  40.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  41.  
  42.     if(ulKey == TE_MOUSE_BUTTON0)
  43.     {
  44.  
  45.         if(ulMouseY >= ulCenterY - 60 && ulMouseY <= ulCenterY - 42)
  46.             m_GameState = VIDEOMENU;
  47.         else if(ulMouseY >= ulCenterY - 40 && ulMouseY <= ulCenterY - 22)
  48.             m_GameState = AUDIOMENU;
  49.         else if(ulMouseY >= ulCenterY - 20 && ulMouseY <= ulCenterY - 2)
  50.             m_GameState = INPUTMENU1;
  51.         else if(ulMouseY >= ulCenterY + 40 && ulMouseY <= ulCenterY + 58)
  52.             m_bPlayIntro = !m_bPlayIntro;
  53.         else if(ulMouseY >= ulCenterY + 60 && ulMouseY <= ulCenterY + 78)
  54.         {
  55.             TEString Language;
  56.             TEString LangFile = "strings.txt";
  57.             
  58.             if(m_Lang == ENGLISH)
  59.             {
  60.                 m_Lang = GERMAN;
  61.                 Language = "GERMAN";
  62.             }
  63.             else if(m_Lang == GERMAN)
  64.             {
  65.                 m_Lang = ENGLISH;
  66.                 Language = "ENGLISH";
  67.             }
  68.             
  69.             TETranslator::GetTranslator()->SetLanguage(Language, LangFile);
  70.         }
  71.         else if(ulMouseY >= ulCenterY + 80 && ulMouseY <= ulCenterY + 98)
  72.             m_bShowTacho = !m_bShowTacho;
  73.         else if(ulMouseY >= ulCenterY + 100 && ulMouseY <= ulCenterY + 118)
  74.             m_bCamAnimation = !m_bCamAnimation;
  75.     }
  76.     else if(ulMouseY >= ulCenterY + 20 && ulMouseY <= ulCenterY + 38)
  77.     {
  78.         if(m_PlayerName.GetLength() >= 30 || ulKey == TE_KEY_DELETE)
  79.             m_PlayerName.Set("");
  80.         else if(ulKey == TE_KEY_BACKSPACE)
  81.         {
  82.             Char acTmp[256];
  83.             UInt32 ulTmp = m_PlayerName.GetLength();
  84.  
  85.             if(ulTmp >= 255)
  86.                 m_PlayerName.Set("");
  87.             {
  88.                 sprintf(acTmp, m_PlayerName.Get());
  89.                 
  90.                 if(ulTmp != 0) ulTmp--;    
  91.  
  92.                 acTmp[ulTmp] = '\0';
  93.                 m_PlayerName.Set(acTmp);
  94.             }
  95.         }
  96.         else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9) || (ulKey >= TE_KEY_A && ulKey <= TE_KEY_Z) || ulKey == TE_KEY_SPACE)
  97.         {
  98.             Char acTmp[] = {m_pInputDevices->Translate(ulKey), '\0'};
  99.             TEString Tmp = acTmp;
  100.  
  101.             if(m_pInputDevices->IsPressed(TE_KEY_SHIFT))
  102.                 Tmp.MakeUpperCase();
  103.             else Tmp.MakeLowerCase();
  104.  
  105.             m_PlayerName = m_PlayerName + Tmp;
  106.         }
  107.     }
  108. }
  109.  
  110. void FRApp::KeyDownVideoMenu(TEKeyState ulKey)
  111. {
  112.     if(ulKey == TE_MOUSE_BUTTON0)
  113.     {
  114.         UInt32 ulMouseX, ulMouseY;        
  115.         UInt32 ulCenterY = m_usScreenHeight / 2;
  116.         
  117.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  118.  
  119.         if(ulMouseY >= ulCenterY + 40 && ulMouseY <= ulCenterY + 58)
  120.             m_bUseMirror = !m_bUseMirror;
  121.         else if(ulMouseY >= ulCenterY + 20 && ulMouseY <= ulCenterY + 38)
  122.         {
  123.             switch(m_Details){
  124.             case VERYHIGH:
  125.                 m_Details = VERYLOW;
  126.                 break;
  127.             case HIGH:
  128.                 m_Details = VERYHIGH;
  129.                 break;
  130.             case MEDIUM:
  131.                 m_Details = HIGH;
  132.                 break;
  133.             case LOW:
  134.                 m_Details = MEDIUM;
  135.                 break;
  136.             case VERYLOW:
  137.                 m_Details = LOW;
  138.                 break;
  139.             };
  140.         }
  141.         else if(ulMouseY >= ulCenterY && ulMouseY <= ulCenterY + 18)
  142.         {
  143.             if(m_usScreenBpp == 0)
  144.                 m_usScreenBpp = 16;
  145.             else m_usScreenBpp = 0;
  146.         }
  147.         else if(ulMouseY >= ulCenterY - 20 && ulMouseY <= ulCenterY - 2)
  148.         {
  149.             if(m_usScreenBpp == 32)
  150.                 m_usScreenBpp = 16;
  151.             else m_usScreenBpp = 32;
  152.         }
  153.         else if(ulMouseY >= ulCenterY - 40 && ulMouseY <= ulCenterY - 22)
  154.         {
  155.             if(ulMouseX < (UInt32) m_usScreenWidth / 2)
  156.             {
  157.                 m_usScreenWidth = 1024;
  158.                 m_usScreenHeight = 768;
  159.             }
  160.             else
  161.             {
  162.                 m_usScreenWidth = 1280;
  163.                 m_usScreenHeight = 1024;
  164.             }
  165.  
  166.             m_pRenderer->SetResolution(m_usScreenWidth, m_usScreenHeight, m_usScreenBpp);
  167.         }
  168.         else if(ulMouseY >= ulCenterY - 60 && ulMouseY <= ulCenterY - 42)
  169.         {
  170.             if(ulMouseX < (UInt32) m_usScreenWidth / 2)
  171.             {
  172.                 m_usScreenWidth = 640;
  173.                 m_usScreenHeight = 480;
  174.             }
  175.             else
  176.             {
  177.                 m_usScreenWidth = 800;
  178.                 m_usScreenHeight = 600;
  179.             }
  180.             
  181.             m_pRenderer->SetResolution(m_usScreenWidth, m_usScreenHeight, m_usScreenBpp);
  182.         }
  183.     }
  184. }
  185.  
  186. void FRApp::KeyDownAudioMenu(TEKeyState ulKey)
  187. {
  188.     if(ulKey == TE_MOUSE_BUTTON0)
  189.     {
  190.         UInt32 ulMouseX, ulMouseY;
  191.         UInt32 ulCenterY = m_usScreenHeight / 2;
  192.         
  193.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  194.         
  195.         if(ulMouseY >= ulCenterY + 40 && ulMouseY <= ulCenterY + 60)
  196.         {
  197.             if(m_Music == DEFAULT)
  198.                 m_Music = FROMCD;
  199.             else if(m_Music == FROMCD)
  200.                 m_Music = NONE;
  201.             else m_Music = DEFAULT;
  202.         }
  203.         else if(ulMouseY >= ulCenterY - 50 && ulMouseY <= ulCenterY - 30)
  204.         {
  205.             if(ulMouseX < (UInt32) (m_usScreenWidth / 2 - 50))
  206.                 ulMouseX = m_usScreenWidth / 2 - 50;
  207.             
  208.             if(ulMouseX > (UInt32) (m_usScreenWidth / 2 + 50))
  209.                 ulMouseX = m_usScreenWidth / 2 + 50;
  210.  
  211.             m_fGeneralVolume = (ulMouseX - m_usScreenWidth / 2 + 50) / 25.0f;
  212.         }
  213.         else if(ulMouseY >= ulCenterY - 10 && ulMouseY <= ulCenterY + 10)
  214.         {
  215.             if(ulMouseX < (UInt32) (m_usScreenWidth / 2 - 50))
  216.                 ulMouseX = m_usScreenWidth / 2 - 50;
  217.             
  218.             if(ulMouseX > (UInt32) (m_usScreenWidth / 2 + 50))
  219.                 ulMouseX = m_usScreenWidth / 2 + 50;
  220.  
  221.             m_fMusicVolume = (ulMouseX - m_usScreenWidth / 2 + 50) / 12.5f;
  222.         }
  223.     }
  224. }
  225.  
  226. void FRApp::KeyDownInputMenu1(TEKeyState ulKey)
  227. {
  228.     UInt32 ulMouseX, ulMouseY;
  229.     UInt32 ulCenterY = m_usScreenHeight / 2;
  230.     
  231.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  232.     
  233.     if(ulKey == TE_MOUSE_BUTTON0)
  234.     {
  235.         if(ulMouseY >= ulCenterY + 40 && ulMouseY <= ulCenterY + 60)
  236.         {
  237.             m_GameState = INPUTMENU2;
  238.             return;
  239.         }
  240.     }
  241.     
  242.     if(!KeyInUse(ulKey))
  243.     {
  244.         if(ulMouseY >= ulCenterY - 80 && ulMouseY <= ulCenterY - 62)
  245.             m_aulKeys[0] = ulKey;
  246.         else if(ulMouseY >= ulCenterY - 60 && ulMouseY <= ulCenterY - 42)
  247.             m_aulKeys[1] = ulKey;
  248.         else if(ulMouseY >= ulCenterY - 40 && ulMouseY <= ulCenterY - 22)
  249.             m_aulKeys[2] = ulKey;
  250.         else if(ulMouseY >= ulCenterY - 20 && ulMouseY <= ulCenterY - 2)
  251.             m_aulKeys[3] = ulKey;
  252.         else if(ulMouseY >= ulCenterY && ulMouseY <= ulCenterY + 18)
  253.             m_aulKeys[4] = ulKey;
  254.         else if(ulMouseY >= ulCenterY + 20 && ulMouseY <= ulCenterY + 38)
  255.             m_aulKeys[5] = ulKey;
  256.     }
  257. }
  258.  
  259. void FRApp::KeyDownInputMenu2(TEKeyState ulKey)
  260. {
  261.     UInt32 ulMouseX, ulMouseY;
  262.     UInt32 ulCenterY = m_usScreenHeight / 2;
  263.     
  264.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  265.     
  266.     if(ulKey == TE_MOUSE_BUTTON0)
  267.     {        
  268.         if(ulMouseY >= ulCenterY + 40 && ulMouseY <= ulCenterY + 60)
  269.         {
  270.             m_GameState = INPUTMENU3;
  271.             return;
  272.         }
  273.         else if(ulMouseY >= ulCenterY - 80 && ulMouseY <= ulCenterY - 60)
  274.         {
  275.             m_GameState = INPUTMENU1;
  276.             return;
  277.         }
  278.     }
  279.     
  280.     if(!KeyInUse(ulKey))
  281.     {
  282.         if(ulMouseY >= ulCenterY - 60 && ulMouseY <= ulCenterY - 42)
  283.             m_aulKeys[6] = ulKey;
  284.         else if(ulMouseY >= ulCenterY - 40 && ulMouseY <= ulCenterY - 22)
  285.             m_aulKeys[7] = ulKey;
  286.         else if(ulMouseY >= ulCenterY - 20 && ulMouseY <= ulCenterY - 2)
  287.             m_aulKeys[8] = ulKey;
  288.         else if(ulMouseY >= ulCenterY && ulMouseY <= ulCenterY + 18)
  289.             m_aulKeys[9] = ulKey;
  290.         else if(ulMouseY >= ulCenterY + 20 && ulMouseY <= ulCenterY + 38)
  291.             m_aulKeys[10] = ulKey;
  292.     }
  293. }
  294.  
  295. void FRApp::KeyDownInputMenu3(TEKeyState ulKey)
  296. {
  297.     UInt32 ulMouseX, ulMouseY;
  298.     UInt32 ulCenterY = m_usScreenHeight / 2;
  299.     
  300.     if(ulKey == TE_MOUSE_BUTTON0)
  301.     {
  302.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  303.         
  304.         if(ulMouseY >= ulCenterY - 80 && ulMouseY <= ulCenterY - 60)
  305.             m_GameState = INPUTMENU2;
  306.         else if(ulMouseY >= ulCenterY - 40 && ulMouseY <= ulCenterY - 20)
  307.             m_bUseJoystick = !m_bUseJoystick;    
  308.         else if(m_bUseJoystick && ulMouseY >= ulCenterY - 20 && ulMouseY <= ulCenterY)
  309.         {
  310.             if(m_JoystickAccel == YAXIS)
  311.                 m_JoystickAccel = ZAXIS;
  312.             else if(m_JoystickAccel == ZAXIS)
  313.                 m_JoystickAccel = NOAXIS;
  314.             else if(m_JoystickAccel == NOAXIS)
  315.                 m_JoystickAccel = YAXIS;
  316.         }
  317.         else if(m_bUseJoystick && ulMouseY >= ulCenterY + 20 && ulMouseY <= ulCenterY + 40)
  318.         {
  319.             if(ulMouseX < (UInt32) (m_usScreenWidth / 2 - 50))
  320.                 ulMouseX = m_usScreenWidth / 2 - 50;
  321.             
  322.             if(ulMouseX > (UInt32) (m_usScreenWidth / 2 + 50))
  323.                 ulMouseX = m_usScreenWidth / 2 + 50;
  324.  
  325.             m_fJoystickSensitivity = (ulMouseX - m_usScreenWidth / 2 + 50) / 25.0f;
  326.         }
  327.     }
  328. }
  329.  
  330. void FRApp::KeyDownCareerMenu(TEKeyState ulKey)
  331. {
  332.     UInt32 ulMouseX, ulMouseY;
  333.     UInt32 ulCenterX = m_usScreenWidth / 2;
  334.     UInt32 ulCenterY = m_usScreenHeight / 2;
  335.     
  336.     if(ulKey == TE_MOUSE_BUTTON0)
  337.     {
  338.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  339.  
  340.         if(ulMouseY >= ulCenterY-10 && ulMouseY <= ulCenterY+10)
  341.         {
  342.             if(ulMouseX < ulCenterX-120)
  343.                 m_usDifficulty = 1;
  344.             else if(ulMouseX > ulCenterX+120)
  345.                 m_usDifficulty = 3;
  346.             else m_usDifficulty = 2;
  347.         }
  348.         else if(ulMouseY >= ulCenterY+90 && ulMouseY <= ulCenterY+110)
  349.         {
  350.             if(m_pCareer != NULL)
  351.                 m_GameState = CAREERRACEMENU;
  352.         }
  353.         else if(ulMouseY >= ulCenterY+150 && ulMouseY <= ulCenterY+170)
  354.         {
  355.             if(ulMouseX <= ulCenterX - 10)
  356.                 m_GameState = MAINMENU;
  357.             else if(ulMouseX >= ulCenterX + 10)
  358.             {
  359.                 UInt32 ulCount;
  360.                 bool abInUse[10];
  361.  
  362.                 memset(abInUse, false, sizeof(bool)*10);
  363.  
  364.                 m_GameState = CAREERRACEMENU;
  365.  
  366.                 SafeDelete(m_pCareer);
  367.                 m_pCareer = new FRCareerInfo;
  368.                 TEAssert(m_pCareer);
  369.                 m_pCareer->aulDriverPlacement[0] = 0;
  370.                 m_pCareer->aulDriverPlacement[1] = 1;
  371.                 m_pCareer->aulDriverPlacement[2] = 2;
  372.                 m_pCareer->aulDriverPlacement[3] = 3;
  373.                 m_pCareer->ulCurrRace = 0;
  374.                 m_pCareer->usDifficulty = m_usDifficulty;
  375.                 memset(m_pCareer->aulDriverScore, 0, sizeof(UInt32)*4);
  376.                 m_pCareer->aulOpponents[0] = 25 - TERandM(8) - 8 * (m_usDifficulty - 1);
  377.  
  378.                 do m_pCareer->aulOpponents[1] = 25 - TERandM(8) - 8 * (m_usDifficulty - 1);
  379.                 while(m_pCareer->aulOpponents[0] == m_pCareer->aulOpponents[1]);
  380.  
  381.                 do m_pCareer->aulOpponents[2] = 25 - TERandM(8) - 8 * (m_usDifficulty - 1);
  382.                 while(m_pCareer->aulOpponents[0] == m_pCareer->aulOpponents[2] || m_pCareer->aulOpponents[1] == m_pCareer->aulOpponents[2]);
  383.  
  384.                 for(ulCount = 0; ulCount < 10; ulCount++)
  385.                 {
  386.                     m_pCareer->aulTrack[ulCount] = TERandM(NUM_TRACKS)-1;
  387.  
  388.                     if(ulCount > 0)
  389.                     {
  390.                         while(m_pCareer->aulTrack[ulCount] == m_pCareer->aulTrack[ulCount-1])
  391.                             m_pCareer->aulTrack[ulCount] = TERandM(NUM_TRACKS)-1;
  392.                     }
  393.  
  394.                     do m_pCareer->aulRaces[ulCount] = TERandM(10)-1;
  395.                     while(abInUse[m_pCareer->aulRaces[ulCount]]);
  396.  
  397.                     abInUse[m_pCareer->aulRaces[ulCount]] = true;
  398.                 }
  399.             }
  400.         }
  401.     }
  402. }
  403.  
  404. void FRApp::KeyDownCareerRaceMenu(TEKeyState ulKey)
  405. {
  406.     UInt32 ulMouseX, ulMouseY;
  407.     UInt32 ulCenterX = m_usScreenWidth / 2;
  408.     UInt32 ulCenterY = m_usScreenHeight / 2;
  409.     
  410.     if(ulKey == TE_MOUSE_BUTTON0)
  411.     {
  412.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  413.  
  414.  
  415.         if(ulMouseY >= ulCenterY+130 && ulMouseY <= ulCenterY+148)
  416.         {
  417.             Int32* plTmp;
  418.  
  419.             if(ulMouseX <= ulCenterX - 165)
  420.             {
  421.                 plTmp = (Int32*) &m_CurrCar;
  422.                 *plTmp = *plTmp - 1;
  423.  
  424.                 if(*plTmp < 0)
  425.                     *plTmp = 8;
  426.  
  427.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  428.                     *plTmp = 6;
  429.             }
  430.             else if(ulMouseX >= ulCenterX + 165)
  431.             {
  432.                 plTmp = (Int32*) &m_CurrCar;
  433.                 *plTmp = *plTmp + 1;
  434.  
  435.                 if(*plTmp > 8)
  436.                     *plTmp = 0;
  437.  
  438.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  439.                     *plTmp = 8;
  440.             }
  441.         }
  442.         else if(ulMouseY >= ulCenterY+190 && ulMouseY <= ulCenterY+210)
  443.         {
  444.             if(ulMouseX <= ulCenterX - 10)
  445.                 m_GameState = MAINMENU;
  446.             else if(ulMouseX >= ulCenterX + 10)
  447.             {
  448.                 Int32 lCount;
  449.                 Char acTmp[32];
  450.                 TEString Name;
  451.  
  452.                 m_ulNumLapsForCurrRace = m_ulNumLaps;
  453.                 m_ulCurrTrack = m_pCareer->aulTrack[m_pCareer->ulCurrRace];
  454.                 m_GameState = RACE;
  455.                 m_bCareerRace = true;
  456.                 FRPowerUp::ms_bHideType = false;
  457.                 LoadCurrTrack();
  458.                 
  459.                 if(m_pBackgroundMusic != NULL)
  460.                 {
  461.                     m_pBackgroundMusic->Stop();
  462.                     SafeDelete(m_pBackgroundMusic);
  463.                 }
  464.                 
  465.                 switch(m_Music){
  466.                 case DEFAULT:
  467.                     sprintf(acTmp, "music%d.ogg", TERandM(4));
  468.                     Name = acTmp;
  469.                     m_pBackgroundMusic = TESoundManager::GetSoundManager()->GetSound(Name);
  470.                     m_pBackgroundMusic->Play(TESOUND_LOOP, m_fGeneralVolume * m_fMusicVolume);
  471.                     break;
  472.                 case FROMCD:
  473.                     lCount = m_pCDPlayer->GetNumberOfTracks();
  474.                     
  475.                     if(lCount > 0)
  476.                         m_pCDPlayer->Play(TERandM(lCount)-1);
  477.                     break;
  478.                 };
  479.                 
  480.                 for(lCount = 0; lCount < 3; lCount++)
  481.                 {
  482.                     if(ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_bForceCar)
  483.                         m_apCars[lCount] = GetCar(ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_ForcedCar, m_aStartPositions[m_pCareer->aulDriverPlacement[lCount]], m_aStartRotations[m_pCareer->aulDriverPlacement[lCount]]);
  484.                     else m_apCars[lCount] = GetCar(ms_aOpponents[m_pCareer->aulOpponents[lCount]].m_Car, m_aStartPositions[m_pCareer->aulDriverPlacement[lCount]], m_aStartRotations[m_pCareer->aulDriverPlacement[lCount]]);
  485.  
  486.                     m_apCars[lCount]->m_DriverName = ms_aOpponents[m_pCareer->aulOpponents[lCount]].m_Name;
  487.                     m_apCars[lCount]->m_bAIUsesHorn = ms_aOpponents[m_pCareer->aulOpponents[lCount]].m_bUsesHorn;
  488.                     m_apCars[lCount]->m_fAIEfficiency = ms_aOpponents[m_pCareer->aulOpponents[lCount]].m_fAIEfficiency;
  489.  
  490.                     if(m_apCars[lCount]->m_fRotFactor < 120.0f)
  491.                         m_apCars[lCount]->m_fRotFactor = 120.0f;
  492.  
  493.                     m_pEngine->AddObjectToWorld(m_apCars[lCount]);
  494.                 }
  495.                 
  496.                 m_apCars[3] = m_pCar = GetCar(m_CurrCar, m_aStartPositions[m_pCareer->aulDriverPlacement[3]], m_aStartRotations[m_pCareer->aulDriverPlacement[3]]);
  497.                 m_pCar->m_Type = LOCAL;
  498.                 m_pCar->m_DriverName = m_PlayerName;
  499.                 m_pEngine->AddObjectToWorld(m_pCar);
  500.  
  501.                 if(m_pCareer->usDifficulty == 2)
  502.                 {
  503.                     for(lCount = FIRST_GEAR; lCount < (Int32) m_pCar->m_ulNumGears; lCount++)
  504.                         m_pCar->m_aGears[lCount].fRPMChange *= 0.9f;
  505.                 }
  506.                 else if(m_pCareer->usDifficulty == 3)
  507.                 {
  508.                     for(lCount = FIRST_GEAR; lCount < (Int32) m_pCar->m_ulNumGears; lCount++)
  509.                     {
  510.                         m_pCar->m_aGears[lCount].fRPMChange *= 0.8f;
  511.                         m_pCar->m_aGears[lCount].fRPMTrans *= 0.9f;
  512.                     }
  513.                 }
  514.                 
  515.                 memcpy(m_aulPosition, m_pCareer->aulDriverPlacement, sizeof(UInt32)*4);
  516.                 
  517.                 TETextureManager::GetTextureManager()->ReleaseUnusedTextures();
  518.                 TEModelManager::GetModelManager()->FreeUnusedModels();
  519.                 TESoundManager::GetSoundManager()->FreeUnusedSounds();
  520.  
  521.                 m_fCamDelta = 0;
  522.                 m_ulTachoSpeed = 0;
  523.                 m_pEngine->ShowCursor(false);
  524.                 m_ulCountdown = m_pTimer->GetTime();
  525.                 m_bShowAbortMenu = false;
  526.             }
  527.         }
  528.     }
  529. }
  530.  
  531. void FRApp::KeyDownQuickRaceMenu(TEKeyState ulKey)
  532. {
  533.     Int32* plTmp;
  534.     UInt32 ulMouseX, ulMouseY;
  535.     UInt32 ulCenterX = m_usScreenWidth / 2;
  536.     UInt32 ulCenterY = m_usScreenHeight / 2;
  537.     
  538.     if(ulKey == TE_MOUSE_BUTTON0)
  539.     {
  540.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  541.  
  542.         if(ulMouseY >= ulCenterY-95 && ulMouseY <= ulCenterY-77)
  543.         {
  544.             if(ulMouseX <= ulCenterX - 165)
  545.             {
  546.                 plTmp = (Int32*) &m_CurrGameType;
  547.                 *plTmp = *plTmp - 1;
  548.  
  549.                 if(*plTmp < 0)
  550.                     *plTmp = 4;
  551.  
  552.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  553.                     m_ulNumLaps < 3)
  554.                     m_ulNumLaps = 3;
  555.             }
  556.             else if(ulMouseX >= ulCenterX + 165)
  557.             {
  558.                 plTmp = (Int32*) &m_CurrGameType;
  559.                 *plTmp = *plTmp + 1;
  560.  
  561.                 if(*plTmp > 4)
  562.                     *plTmp = 0;
  563.  
  564.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  565.                     m_ulNumLaps < 3)
  566.                     m_ulNumLaps = 3;
  567.             }
  568.         }
  569.         else if(ulMouseY >= ulCenterY-50 && ulMouseY <= ulCenterY-32)
  570.         {
  571.             if(ulMouseX <= ulCenterX - 165)
  572.             {
  573.                 plTmp = (Int32*) &m_CurrCar;
  574.                 *plTmp = *plTmp - 1;
  575.  
  576.                 if(*plTmp < 0)
  577.                     *plTmp = 8;
  578.  
  579.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  580.                     *plTmp = 6;
  581.             }
  582.             else if(ulMouseX >= ulCenterX + 165)
  583.             {
  584.                 plTmp = (Int32*) &m_CurrCar;
  585.                 *plTmp = *plTmp + 1;
  586.  
  587.                 if(*plTmp > 8)
  588.                     *plTmp = 0;
  589.  
  590.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  591.                     *plTmp = 8;
  592.             }
  593.         }
  594.         else if(ulMouseY >= ulCenterY-5 && ulMouseY <= ulCenterY+13)
  595.         {
  596.             if(ulMouseX <= ulCenterX - 165)
  597.             {
  598.                 m_ulNumLaps--;
  599.  
  600.                 if(m_ulNumLaps < 1)
  601.                     m_ulNumLaps = 30;
  602.  
  603.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  604.                     m_ulNumLaps < 3)
  605.                     m_ulNumLaps = 30;
  606.             }
  607.             else if(ulMouseX >= ulCenterX + 165)
  608.             {
  609.                 m_ulNumLaps++;
  610.  
  611.                 if(m_ulNumLaps > 30)
  612.                     m_ulNumLaps = 1;
  613.  
  614.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  615.                     m_ulNumLaps < 3)
  616.                     m_ulNumLaps = 3;
  617.             }
  618.         }
  619.         else if(ulMouseY >= ulCenterY+40 && ulMouseY <= ulCenterY+58)
  620.         {
  621.             if(ulMouseX <= ulCenterX - 165)
  622.             {
  623.                 if(m_ulCurrTrack > 0)
  624.                     m_ulCurrTrack--;
  625.                 else m_ulCurrTrack = NUM_TRACKS - 1;
  626.             }
  627.             else if(ulMouseX >= ulCenterX + 165)
  628.             {
  629.                 m_ulCurrTrack++;
  630.  
  631.                 if(m_ulCurrTrack >= NUM_TRACKS)
  632.                     m_ulCurrTrack = 0;
  633.             }
  634.         }
  635.         else if(ulMouseY >= ulCenterY+180 && ulMouseY <= ulCenterY+200)
  636.         {
  637.             if(ulMouseX <= ulCenterX - 10)
  638.                 m_GameState = MAINMENU;
  639.             else if(ulMouseX >= ulCenterX + 10)
  640.             {
  641.                 m_ulNumLapsForCurrRace = m_ulNumLaps;
  642.                 m_GameState = RACE;
  643.                 FRPowerUp::ms_bHideType = false;
  644.                 m_bCareerRace = false;
  645.                 LoadCurrTrack();
  646.                 StartRace();
  647.             }
  648.         }
  649.     }
  650. }
  651.  
  652. void FRApp::KeyDownNetworkMenu(TEKeyState ulKey)
  653. {
  654.     UInt32 ulMouseX, ulMouseY;
  655.     UInt32 ulCenterX = m_usScreenWidth / 2;
  656.     UInt32 ulCenterY = m_usScreenHeight / 2;
  657.     
  658.     if(ulKey == TE_MOUSE_BUTTON0)
  659.     {
  660.         m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  661.  
  662.         if(ulMouseY >= ulCenterY+180 && ulMouseY <= ulCenterY+200)
  663.             m_GameState = MAINMENU;
  664.         else if(ulMouseY >= ulCenterY-40 && ulMouseY <= ulCenterY-20)
  665.             m_GameState = SERVERMENU;
  666.         else if(ulMouseY >= ulCenterY+40 && ulMouseY <= ulCenterY+60)
  667.             m_GameState = CLIENTMENU;
  668.     }
  669. }
  670.  
  671. void FRApp::KeyDownServerMenu(TEKeyState ulKey)
  672. {
  673.     Int32* plTmp;
  674.     UInt32 ulMouseX, ulMouseY;
  675.     UInt32 ulCenterX = m_usScreenWidth / 2;
  676.     UInt32 ulCenterY = m_usScreenHeight / 2;
  677.     
  678.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  679.  
  680.     if(ulKey == TE_MOUSE_BUTTON0)
  681.     {
  682.         if(ulMouseY >= ulCenterY-95 && ulMouseY <= ulCenterY-77)
  683.         {
  684.             if(ulMouseX <= ulCenterX - 165)
  685.             {
  686.                 plTmp = (Int32*) &m_CurrGameType;
  687.                 *plTmp = *plTmp - 1;
  688.  
  689.                 if(*plTmp < 0)
  690.                     *plTmp = 4;
  691.  
  692.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  693.                     m_ulNumLaps < 3)
  694.                     m_ulNumLaps = 3;
  695.             }
  696.             else if(ulMouseX >= ulCenterX + 165)
  697.             {
  698.                 plTmp = (Int32*) &m_CurrGameType;
  699.                 *plTmp = *plTmp + 1;
  700.  
  701.                 if(*plTmp > 4)
  702.                     *plTmp = 0;
  703.  
  704.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  705.                     m_ulNumLaps < 3)
  706.                     m_ulNumLaps = 3;
  707.             }
  708.         }
  709.         else if(ulMouseY >= ulCenterY-50 && ulMouseY <= ulCenterY-32)
  710.         {
  711.             if(ulMouseX <= ulCenterX - 165)
  712.             {
  713.                 plTmp = (Int32*) &m_CurrCar;
  714.                 *plTmp = *plTmp - 1;
  715.  
  716.                 if(*plTmp < 0)
  717.                     *plTmp = 8;
  718.  
  719.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  720.                     *plTmp = 6;
  721.             }
  722.             else if(ulMouseX >= ulCenterX + 165)
  723.             {
  724.                 plTmp = (Int32*) &m_CurrCar;
  725.                 *plTmp = *plTmp + 1;
  726.  
  727.                 if(*plTmp > 8)
  728.                     *plTmp = 0;
  729.  
  730.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  731.                     *plTmp = 8;
  732.             }
  733.         }
  734.         else if(ulMouseY >= ulCenterY-5 && ulMouseY <= ulCenterY+13)
  735.         {
  736.             if(ulMouseX <= ulCenterX - 165)
  737.             {
  738.                 m_ulNumLaps--;
  739.  
  740.                 if(m_ulNumLaps < 1)
  741.                     m_ulNumLaps = 30;
  742.  
  743.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  744.                     m_ulNumLaps < 3)
  745.                     m_ulNumLaps = 30;
  746.             }
  747.             else if(ulMouseX >= ulCenterX + 165)
  748.             {
  749.                 m_ulNumLaps++;
  750.  
  751.                 if(m_ulNumLaps > 30)
  752.                     m_ulNumLaps = 1;
  753.  
  754.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  755.                     m_ulNumLaps < 3)
  756.                     m_ulNumLaps = 3;
  757.             }
  758.         }
  759.         else if(ulMouseY >= ulCenterY+40 && ulMouseY <= ulCenterY+58)
  760.         {
  761.             if(ulMouseX <= ulCenterX - 165)
  762.             {
  763.                 if(m_ulCurrTrack > 0)
  764.                     m_ulCurrTrack--;
  765.                 else m_ulCurrTrack = NUM_TRACKS - 1;
  766.             }
  767.             else if(ulMouseX >= ulCenterX + 165)
  768.             {
  769.                 m_ulCurrTrack++;
  770.  
  771.                 if(m_ulCurrTrack >= NUM_TRACKS)
  772.                     m_ulCurrTrack = 0;
  773.             }
  774.         }
  775.         else if(ulMouseY >= ulCenterY+180 && ulMouseY <= ulCenterY+200)
  776.         {
  777.             if(ulMouseX <= ulCenterX - 10)
  778.                 m_GameState = MAINMENU;
  779.             else if(ulMouseX >= ulCenterX + 10)
  780.             {
  781.                 Char acTmp1[32], acTmp2[32];
  782.                 TEGameID GameID;
  783.  
  784.                 sprintf(GameID.acID, "FR 1.00");
  785.  
  786.                 m_ulNumLapsForCurrRace = m_ulNumLaps;
  787.                 m_GameState = WAITINGFORCLIENTS;
  788.  
  789.                 m_ulNumClients = 0;
  790.                 m_apClients[0] = m_apClients[1] = m_apClients[2] = NULL;
  791.                 m_abClientReady[0] = m_abClientReady[1] = m_abClientReady[2] = false;
  792.                 m_aClientCars[0] = m_aClientCars[1] = m_aClientCars[2] = ACLASS;
  793.  
  794.                 sprintf(acTmp1, m_PlayerName.Get());
  795.                 sprintf(acTmp2, m_ServerPassword.Get());
  796.  
  797.                 m_pNetworkManager->SetGameID(GameID);
  798.                 m_pNetworkManager->SetNetPort(m_usNetPort);
  799.                 m_pNetworkManager->StartServer(acTmp1, 3, acTmp2);
  800.                 
  801.                 TENetworkManager::ms_bRefuseConnection = false;
  802.  
  803.                 FRPowerUp::ms_bHideType = true;
  804.  
  805.                 LoadCurrTrack();
  806.             }
  807.         }
  808.     }
  809.     else if(ulMouseY >= ulCenterY+120 && ulMouseY <= ulCenterY+140)
  810.     {
  811.         if(ulKey == TE_KEY_DELETE)
  812.             m_ServerPassword.Set("");
  813.         else if(ulKey == TE_KEY_BACKSPACE)
  814.         {
  815.             Char acTmp[256];
  816.             UInt32 ulTmp = m_ServerPassword.GetLength();
  817.  
  818.             if(ulTmp >= 255)
  819.                 m_ServerPassword.Set("");
  820.             {
  821.                 sprintf(acTmp, m_ServerPassword.Get());
  822.                 
  823.                 if(ulTmp != 0) ulTmp--;    
  824.  
  825.                 acTmp[ulTmp] = '\0';
  826.                 m_ServerPassword.Set(acTmp);
  827.             }
  828.         }
  829.         else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9) || (ulKey >= TE_KEY_A && ulKey <= TE_KEY_Z))
  830.         {
  831.             Char acTmp[] = {m_pInputDevices->Translate(ulKey), '\0'};
  832.             TEString Tmp = acTmp;
  833.  
  834.             if(m_pInputDevices->IsPressed(TE_KEY_SHIFT))
  835.                 Tmp.MakeUpperCase();
  836.             else Tmp.MakeLowerCase();
  837.  
  838.             m_ServerPassword = m_ServerPassword + Tmp;
  839.         }
  840.     }
  841.     else if(ulMouseY >= ulCenterY+90 && ulMouseY <= ulCenterY+110)
  842.     {
  843.         if(ulKey == TE_KEY_DELETE)
  844.             m_usNetPort = 0;
  845.         else if(ulKey == TE_KEY_BACKSPACE)
  846.             m_usNetPort = m_usNetPort / 10;
  847.         else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9))
  848.             m_usNetPort = m_usNetPort * 10 + (UInt16) ulKey;
  849.  
  850.         if(m_usNetPort > 9999)
  851.             m_usNetPort = 0;
  852.     }
  853. }
  854.  
  855. void FRApp::KeyDownClientMenu(TEKeyState ulKey)
  856. {
  857.     Int32* plTmp;
  858.     UInt32 ulMouseX, ulMouseY;
  859.     UInt32 ulCenterX = m_usScreenWidth / 2;
  860.     UInt32 ulCenterY = m_usScreenHeight / 2;
  861.     
  862.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  863.  
  864.     if(ulKey == TE_MOUSE_BUTTON0)
  865.     {
  866.         if(ulMouseY >= ulCenterY-40 && ulMouseY <= ulCenterY-22)
  867.         {
  868.             if(ulMouseX <= ulCenterX - 165)
  869.             {
  870.                 plTmp = (Int32*) &m_CurrCar;
  871.                 *plTmp = *plTmp - 1;
  872.  
  873.                 if(*plTmp < 0)
  874.                     *plTmp = 8;
  875.  
  876.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  877.                     *plTmp = 6;
  878.             }
  879.             else if(ulMouseX >= ulCenterX + 165)
  880.             {
  881.                 plTmp = (Int32*) &m_CurrCar;
  882.                 *plTmp = *plTmp + 1;
  883.  
  884.                 if(*plTmp > 8)
  885.                     *plTmp = 0;
  886.  
  887.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  888.                     *plTmp = 8;
  889.             }
  890.         }
  891.         else if(ulMouseY >= ulCenterY+160 && ulMouseY <= ulCenterY+180)
  892.         {
  893.             if(ulMouseX <= ulCenterX - 10)
  894.                 m_GameState = MAINMENU;
  895.             else if(ulMouseX >= ulCenterX + 10)
  896.             {
  897.                 Char acTmp1[32], acTmp2[32];
  898.                 TEGameID GameID;
  899.                 TEString Tmp = TETranslator::GetTranslator()->Translate("Connecting...");
  900.                 
  901.                 m_pRenderer->SetAmbient(255,255,255,255);
  902.                 m_pRenderer->SetTexture(m_pMenuBackground);
  903.                 m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  904.                 m_pRenderer->SetAmbient(0,0,200,255);
  905.                 m_pRenderer->DrawText(m_usScreenWidth / 2 - (UInt32) (Tmp.GetLength() * 6.8f), m_usScreenHeight / 2 - 8, 16, Tmp);
  906.                 m_pRenderer->DisplayBackBuffer();
  907.  
  908.                 sprintf(GameID.acID, "FR 1.00");
  909.  
  910.                 m_bConnectedToServer = false;
  911.  
  912.                 sprintf(acTmp1, m_PlayerName.Get());
  913.                 sprintf(acTmp2, m_ServerPassword.Get());
  914.  
  915.                 m_pNetworkManager->SetGameID(GameID);
  916.                 sprintf(acTmp1, m_PlayerName.Get());
  917.                 sprintf(acTmp2, m_ServerPassword.Get());
  918.  
  919.                 m_pNetworkManager->SetNetPort(m_usNetPort);
  920.                 
  921.                 if(m_pNetworkManager->StartClient(m_IP, acTmp1, acTmp2))
  922.                     m_GameState = WAITINGFORSERVER;
  923.  
  924.                 FRPowerUp::ms_bHideType = true;
  925.             }
  926.         }
  927.     }
  928.     else if(ulMouseY >= ulCenterY+100 && ulMouseY <= ulCenterY+118)
  929.     {
  930.         if(ulKey == TE_KEY_DELETE)
  931.             m_ServerPassword.Set("");
  932.         else if(ulKey == TE_KEY_BACKSPACE)
  933.         {
  934.             Char acTmp[256];
  935.             UInt32 ulTmp = m_ServerPassword.GetLength();
  936.  
  937.             if(ulTmp >= 255)
  938.                 m_ServerPassword.Set("");
  939.             {
  940.                 sprintf(acTmp, m_ServerPassword.Get());
  941.                 
  942.                 if(ulTmp != 0) ulTmp--;    
  943.  
  944.                 acTmp[ulTmp] = '\0';
  945.                 m_ServerPassword.Set(acTmp);
  946.             }
  947.         }
  948.         else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9) || (ulKey >= TE_KEY_A && ulKey <= TE_KEY_Z))
  949.         {
  950.             Char acTmp[] = {m_pInputDevices->Translate(ulKey), '\0'};
  951.             TEString Tmp = acTmp;
  952.  
  953.             if(m_pInputDevices->IsPressed(TE_KEY_SHIFT))
  954.                 Tmp.MakeUpperCase();
  955.             else Tmp.MakeLowerCase();
  956.  
  957.             m_ServerPassword = m_ServerPassword + Tmp;
  958.         }
  959.     }
  960.     else if(ulMouseY >= ulCenterY+70 && ulMouseY <= ulCenterY+88)
  961.     {
  962.         if(ulKey == TE_KEY_DELETE)
  963.             m_usNetPort = 0;
  964.         else if(ulKey == TE_KEY_BACKSPACE)
  965.             m_usNetPort = m_usNetPort / 10;
  966.         else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9))
  967.             m_usNetPort = m_usNetPort * 10 + (UInt16) ulKey;
  968.  
  969.         if(m_usNetPort > 9999)
  970.             m_usNetPort = 0;
  971.     }
  972.     else if(ulMouseY >= ulCenterY+40 && ulMouseY <= ulCenterY+58)
  973.     {
  974.         UInt16 usCenterX = m_usScreenWidth / 2;
  975.  
  976.         if(ulMouseX >= (UInt32) usCenterX && ulMouseX <= (UInt32) usCenterX + 39)
  977.         {
  978.             UInt16 usTmp = m_IP.aucAddress[0];
  979.             
  980.             if(ulKey == TE_KEY_DELETE)
  981.                 usTmp = 0;
  982.             else if(ulKey == TE_KEY_BACKSPACE)
  983.                 usTmp = usTmp / 10;
  984.             else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9))
  985.                 usTmp = usTmp * 10 + (UInt16) ulKey;
  986.             
  987.             if(usTmp > 255)
  988.                 usTmp = 0;
  989.  
  990.             m_IP.aucAddress[0] = (UChar) usTmp;
  991.         }
  992.         else if(ulMouseX >= (UInt32) usCenterX+78 && ulMouseX <= (UInt32) usCenterX + 117)
  993.         {
  994.             UInt16 usTmp = m_IP.aucAddress[1];
  995.             
  996.             if(ulKey == TE_KEY_DELETE)
  997.                 usTmp = 0;
  998.             else if(ulKey == TE_KEY_BACKSPACE)
  999.                 usTmp = usTmp / 10;
  1000.             else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9))
  1001.                 usTmp = usTmp * 10 + (UInt16) ulKey;
  1002.             
  1003.             if(usTmp > 255)
  1004.                 usTmp = 0;
  1005.  
  1006.             m_IP.aucAddress[1] = (UChar) usTmp;
  1007.         }
  1008.         else if(ulMouseX >= (UInt32) usCenterX+156 && ulMouseX <= (UInt32) usCenterX + 195)
  1009.         {
  1010.             UInt16 usTmp = m_IP.aucAddress[2];
  1011.             
  1012.             if(ulKey == TE_KEY_DELETE)
  1013.                 usTmp = 0;
  1014.             else if(ulKey == TE_KEY_BACKSPACE)
  1015.                 usTmp = usTmp / 10;
  1016.             else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9))
  1017.                 usTmp = usTmp * 10 + (UInt16) ulKey;
  1018.             
  1019.             if(usTmp > 255)
  1020.                 usTmp = 0;
  1021.  
  1022.             m_IP.aucAddress[2] = (UChar) usTmp;
  1023.         }
  1024.         else if(ulMouseX >= (UInt32) usCenterX+234 && ulMouseX <= (UInt32) usCenterX + 273)
  1025.         {
  1026.             UInt16 usTmp = m_IP.aucAddress[3];
  1027.             
  1028.             if(ulKey == TE_KEY_DELETE)
  1029.                 usTmp = 0;
  1030.             else if(ulKey == TE_KEY_BACKSPACE)
  1031.                 usTmp = usTmp / 10;
  1032.             else if((ulKey >= TE_KEY_0 && ulKey <= TE_KEY_9))
  1033.                 usTmp = usTmp * 10 + (UInt16) ulKey;
  1034.             
  1035.             if(usTmp > 255)
  1036.                 usTmp = 0;
  1037.  
  1038.             m_IP.aucAddress[3] = (UChar) usTmp;
  1039.         }
  1040.     }
  1041. }
  1042.  
  1043. void FRApp::KeyDownInGameMenuServer(TEKeyState ulKey)
  1044. {
  1045.     Int32* plTmp;
  1046.     UInt32 ulMouseX, ulMouseY;
  1047.     UInt32 ulCenterX = m_usScreenWidth / 2;
  1048.     UInt32 ulCenterY = m_usScreenHeight / 2;
  1049.     
  1050.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1051.  
  1052.     if(ulKey == TE_MOUSE_BUTTON0)
  1053.     {
  1054.         if(ulMouseY >= ulCenterY-75 && ulMouseY <= ulCenterY-57)
  1055.         {
  1056.             if(ulMouseX <= ulCenterX - 165)
  1057.             {
  1058.                 plTmp = (Int32*) &m_CurrGameType;
  1059.                 *plTmp = *plTmp - 1;
  1060.  
  1061.                 if(*plTmp < 0)
  1062.                     *plTmp = 4;
  1063.  
  1064.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  1065.                     m_ulNumLaps < 3)
  1066.                     m_ulNumLaps = 3;
  1067.             }
  1068.             else if(ulMouseX >= ulCenterX + 165)
  1069.             {
  1070.                 plTmp = (Int32*) &m_CurrGameType;
  1071.                 *plTmp = *plTmp + 1;
  1072.  
  1073.                 if(*plTmp > 4)
  1074.                     *plTmp = 0;
  1075.  
  1076.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  1077.                     m_ulNumLaps < 3)
  1078.                     m_ulNumLaps = 3;
  1079.             }
  1080.         }
  1081.         else if(ulMouseY >= ulCenterY-30 && ulMouseY <= ulCenterY-12)
  1082.         {
  1083.             if(ulMouseX <= ulCenterX - 165)
  1084.             {
  1085.                 plTmp = (Int32*) &m_CurrCar;
  1086.                 *plTmp = *plTmp - 1;
  1087.  
  1088.                 if(*plTmp < 0)
  1089.                     *plTmp = 8;
  1090.  
  1091.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  1092.                     *plTmp = 6;
  1093.             }
  1094.             else if(ulMouseX >= ulCenterX + 165)
  1095.             {
  1096.                 plTmp = (Int32*) &m_CurrCar;
  1097.                 *plTmp = *plTmp + 1;
  1098.  
  1099.                 if(*plTmp > 8)
  1100.                     *plTmp = 0;
  1101.  
  1102.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  1103.                     *plTmp = 8;
  1104.             }
  1105.         }
  1106.         else if(ulMouseY >= ulCenterY+15 && ulMouseY <= ulCenterY+33)
  1107.         {
  1108.             if(ulMouseX <= ulCenterX - 165)
  1109.             {
  1110.                 m_ulNumLaps--;
  1111.  
  1112.                 if(m_ulNumLaps < 1)
  1113.                     m_ulNumLaps = 30;
  1114.  
  1115.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  1116.                     m_ulNumLaps < 3)
  1117.                     m_ulNumLaps = 30;
  1118.             }
  1119.             else if(ulMouseX >= ulCenterX + 165)
  1120.             {
  1121.                 m_ulNumLaps++;
  1122.  
  1123.                 if(m_ulNumLaps > 30)
  1124.                     m_ulNumLaps = 1;
  1125.  
  1126.                 if((m_CurrGameType == KNOCKOUT || m_CurrGameType == POWERUPKO) &&
  1127.                     m_ulNumLaps < 3)
  1128.                     m_ulNumLaps = 3;
  1129.             }
  1130.         }
  1131.         else if(ulMouseY >= ulCenterY+60 && ulMouseY <= ulCenterY+78)
  1132.         {
  1133.             if(ulMouseX <= ulCenterX - 165)
  1134.             {
  1135.                 if(m_ulCurrTrack > 0)
  1136.                     m_ulCurrTrack--;
  1137.                 else m_ulCurrTrack = NUM_TRACKS - 1;
  1138.             }
  1139.             else if(ulMouseX >= ulCenterX + 165)
  1140.             {
  1141.                 m_ulCurrTrack++;
  1142.  
  1143.                 if(m_ulCurrTrack >= NUM_TRACKS)
  1144.                     m_ulCurrTrack = 0;
  1145.             }
  1146.         }
  1147.         else if(ulMouseY >= ulCenterY+100 && ulMouseY <= ulCenterY+118)
  1148.         {
  1149.             if(ulMouseX < ulCenterX - 60)
  1150.                 ExitRace();
  1151.             else if(ulMouseX > ulCenterX + 60)
  1152.             {
  1153.                 m_bShowAbortMenu = false;
  1154.                 m_pEngine->ShowCursor(false);
  1155.             }
  1156.             else
  1157.             {
  1158.                 FRGameInfo GameInfo;
  1159.                 TEClient* apClients[3];
  1160.                 FRCarName aClientCars[3];
  1161.                 UInt32 ulCount, ulIndex;
  1162.                 
  1163.                 memcpy(apClients, m_apClients, sizeof(TEClient*)*3);
  1164.                 memcpy(aClientCars, m_aClientCars, sizeof(FRCarName)*3);
  1165.                 memset(m_apClients, 0, sizeof(TEClient*)*3);
  1166.                 memset(m_aClientCars, 0, sizeof(FRCarName)*3);
  1167.                 
  1168.                 ulCount = ulIndex = 0;        
  1169.                 
  1170.                 for(; ulCount < m_ulNumClients; ulCount++)
  1171.                 {
  1172.                     if(apClients[ulCount] != NULL)
  1173.                     {
  1174.                         m_apClients[ulIndex] = apClients[ulCount];
  1175.                         m_aClientCars[ulIndex] = aClientCars[ulCount];
  1176.                         ulIndex++;
  1177.                     }
  1178.                     else m_ulNumClients -= 1;
  1179.                 }
  1180.  
  1181.                 m_abClientReady[0] = m_abClientReady[1] = m_abClientReady[2] = false;
  1182.  
  1183.                 m_ulNumLapsForCurrRace = m_ulNumLaps;
  1184.  
  1185.                 GameInfo.ulMsgType = FRGAMEINFO;
  1186.                 GameInfo.GameType = m_CurrGameType;
  1187.                 GameInfo.ulTrack = m_ulCurrTrack;
  1188.                 GameInfo.ulNumLaps = m_ulNumLapsForCurrRace;
  1189.                 
  1190.                 m_pNetworkManager->SendDataToAllClients(&GameInfo, sizeof(GameInfo));
  1191.  
  1192.                 LoadCurrTrack();
  1193.  
  1194.                 m_bShowAbortMenu = false;
  1195.                 m_GameState = WAITINGFORCLIENTS;
  1196.                 TENetworkManager::ms_bRefuseConnection = false;
  1197.             }
  1198.         }
  1199.     }
  1200.     else if(ulKey == TE_KEY_ESCAPE || ulKey == TE_KEY_ENTER)
  1201.     {
  1202.         m_bShowAbortMenu = false;
  1203.         m_pEngine->ShowCursor(false);
  1204.     }
  1205. }
  1206.  
  1207. void FRApp::KeyDownInGameMenuClient(TEKeyState ulKey)
  1208. {
  1209.     Int32* plTmp;
  1210.     UInt32 ulMouseX, ulMouseY;
  1211.     UInt32 ulCenterX = m_usScreenWidth / 2;
  1212.     UInt32 ulCenterY = m_usScreenHeight / 2;
  1213.     
  1214.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1215.  
  1216.     if(ulKey == TE_MOUSE_BUTTON0)
  1217.     {
  1218.         if(ulMouseY >= ulCenterY && ulMouseY <= ulCenterY+18)
  1219.         {
  1220.             if(ulMouseX <= ulCenterX - 165)
  1221.             {
  1222.                 plTmp = (Int32*) &m_CurrCar;
  1223.                 *plTmp = *plTmp - 1;
  1224.  
  1225.                 if(*plTmp < 0)
  1226.                     *plTmp = 8;
  1227.  
  1228.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  1229.                     *plTmp = 6;
  1230.             }
  1231.             else if(ulMouseX >= ulCenterX + 165)
  1232.             {
  1233.                 plTmp = (Int32*) &m_CurrCar;
  1234.                 *plTmp = *plTmp + 1;
  1235.  
  1236.                 if(*plTmp > 8)
  1237.                     *plTmp = 0;
  1238.  
  1239.                 if(!m_bBonusCarAvailable && *plTmp == 7)
  1240.                     *plTmp = 8;
  1241.             }
  1242.         }
  1243.         else if(ulMouseY >= ulCenterY+60 && ulMouseY <= ulCenterY+78)
  1244.         {
  1245.             if(ulMouseX < ulCenterX - 50)
  1246.                 ExitRace();
  1247.             else if(ulMouseX > ulCenterX + 50)
  1248.             {
  1249.                 m_bShowAbortMenu = false;
  1250.                 m_pEngine->ShowCursor(false);
  1251.             }
  1252.         }
  1253.     }
  1254.     else if(ulKey == TE_KEY_ESCAPE || ulKey == TE_KEY_ENTER)
  1255.     {
  1256.         m_bShowAbortMenu = false;
  1257.         m_pEngine->ShowCursor(false);
  1258.     }
  1259. }
  1260.  
  1261. void FRApp::KeyDownStatistic(TEKeyState ulKey)
  1262. {
  1263.     UInt32 ulMouseX, ulMouseY;
  1264.     UInt32 ulCenterX = m_usScreenWidth / 2;
  1265.     UInt32 ulCenterY = m_usScreenHeight / 2;
  1266.     
  1267.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1268.  
  1269.     if(ulKey == TE_MOUSE_BUTTON0)
  1270.     {
  1271.         if(ulMouseY >= ulCenterY+160 && ulMouseY <= ulCenterY+180)
  1272.         {
  1273.             if(ulMouseX <= ulCenterX - 10)
  1274.             {
  1275.                 if(m_pCareer->ulCurrRace == 10)
  1276.                     m_pCareer->ulCurrRace = 9;
  1277.  
  1278.                 m_GameState = MAINMENU;
  1279.                 SaveConfig();
  1280.             }
  1281.             else if(ulMouseX >= ulCenterX + 10)
  1282.             {
  1283.                 m_GameState = CAREERRACEMENU;
  1284.                 
  1285.                 if(m_pCareer->ulCurrRace == 10)
  1286.                 {
  1287.                     UInt32 ulCount;
  1288.                     bool abInUse[10];
  1289.                     
  1290.                     memset(abInUse, false, sizeof(bool)*10);
  1291.                                         
  1292.                     m_pCareer->ulCurrRace = 0;
  1293.                     memset(m_pCareer->aulDriverScore, 0, sizeof(UInt32)*4);
  1294.  
  1295.                     for(ulCount = 0; ulCount < 10; ulCount++)
  1296.                     {
  1297.                         m_pCareer->aulTrack[ulCount] = TERandM(NUM_TRACKS)-1;
  1298.  
  1299.                         if(ulCount > 0)
  1300.                         {
  1301.                             while(m_pCareer->aulTrack[ulCount] == m_pCareer->aulTrack[ulCount-1])
  1302.                                 m_pCareer->aulTrack[ulCount] = TERandM(NUM_TRACKS)-1;
  1303.                         }
  1304.  
  1305.                         do m_pCareer->aulRaces[ulCount] = TERandM(10)-1;
  1306.                         while(abInUse[m_pCareer->aulRaces[ulCount]]);
  1307.  
  1308.                         abInUse[m_pCareer->aulRaces[ulCount]] = true;
  1309.                     }
  1310.  
  1311.                     SaveConfig();
  1312.                     SaveCareer();
  1313.                 }
  1314.             }
  1315.         }
  1316.     }
  1317. }
  1318.  
  1319. bool FRApp::KeyInUse(TEKeyState ulKey)
  1320. {
  1321.     if(ulKey == TE_KEY_ESCAPE)
  1322.         return true;
  1323.  
  1324.     for(UInt32 ulCount = 0; ulCount < NUM_KEYS; ulCount++)
  1325.     {
  1326.         if(m_aulKeys[ulCount] == ulKey)
  1327.             return true;
  1328.     }
  1329.  
  1330.     return false;
  1331. }
  1332.  
  1333. TEString FRApp::GetCarName(FRCarName Type)
  1334. {
  1335.     TEString Name;
  1336.  
  1337.     switch(Type){
  1338.     case PICKUP:
  1339.         Name = "Pickup";
  1340.         break;
  1341.     case MONSTERHUMMER:
  1342.         Name = "Monster Hummer";
  1343.         break;
  1344.     case HUMMER:
  1345.         Name = "Hummer";
  1346.         break;
  1347.     case GOLF:
  1348.         Name = "Golf";
  1349.         break;
  1350.     case FUNERALCAR:
  1351.         Name = "Funeral Car";
  1352.         break;
  1353.     case DODGE:
  1354.         Name = "Dodge";
  1355.         break;
  1356.     case COP:
  1357.         Name = "Cop";
  1358.         break;
  1359.     case AMBULANCE:
  1360.         Name = "Ambulance";
  1361.         break;
  1362.     case ACLASS:
  1363.         Name = "Elk Victim";
  1364.         break;
  1365.     };
  1366.  
  1367.     return Name;
  1368. }
  1369.  
  1370. TEString FRApp::GetGameTypeName(FRGameType Type)
  1371. {
  1372.     TEString Name;
  1373.  
  1374.     switch(Type){
  1375.     case NORMALRACE:
  1376.         Name = "Normal Race";
  1377.         break;
  1378.     case POWERUPRACE:
  1379.         Name = "Race with Powerups";
  1380.         break;
  1381.     case KNOCKOUT:
  1382.         Name = "Knockout Race";
  1383.         break;
  1384.     case POWERUPKO:
  1385.         Name = "Knockout with Powerups";
  1386.         break;
  1387.     case RACETODEATH:
  1388.         Name = "Race to Death";
  1389.     };
  1390.  
  1391.     Name = TETranslator::GetTranslator()->Translate(Name);
  1392.  
  1393.     return Name;
  1394. }
  1395.  
  1396. void FRApp::RenderMainMenu(void)
  1397. {
  1398.     UInt32 ulMouseX, ulMouseY;
  1399.     Int32 lX, lY;
  1400.     UInt16 usCenterX, usCenterY;
  1401.     TETranslator* pTrans = TETranslator::GetTranslator();
  1402.     TEString Tmp;
  1403.  
  1404.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1405.  
  1406.     usCenterX = m_usScreenWidth / 2;
  1407.     usCenterY = m_usScreenHeight / 2;
  1408.  
  1409.     m_pRenderer->EnableBlending();
  1410.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  1411.  
  1412.     m_pRenderer->SetAmbient(255,255,255,255);
  1413.     m_pRenderer->SetTexture(m_pMenuBackground);
  1414.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  1415.  
  1416.     m_pRenderer->SetAmbient(0,0,200,255);
  1417.  
  1418.     Tmp = pTrans->Translate("Career");
  1419.     lY = usCenterY - 60;
  1420.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1421.     {
  1422.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1423.         m_pRenderer->SetAmbient(200,0,0,255);
  1424.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1425.         m_pRenderer->SetAmbient(0,0,200,255);
  1426.     }
  1427.     else
  1428.     {
  1429.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1430.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1431.     }
  1432.  
  1433.     Tmp = pTrans->Translate("Quick Race");
  1434.     lY = usCenterY - 40;
  1435.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1436.     {
  1437.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1438.         m_pRenderer->SetAmbient(200,0,0,255);
  1439.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1440.         m_pRenderer->SetAmbient(0,0,200,255);
  1441.     }
  1442.     else
  1443.     {
  1444.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1445.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1446.     }
  1447.  
  1448.     Tmp = pTrans->Translate("Network Race");
  1449.     lY = usCenterY - 20;
  1450.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1451.     {
  1452.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1453.         m_pRenderer->SetAmbient(200,0,0,255);
  1454.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1455.         m_pRenderer->SetAmbient(0,0,200,255);
  1456.     }
  1457.     else
  1458.     {
  1459.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1460.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1461.     }
  1462.  
  1463.     Tmp = pTrans->Translate("Options");
  1464.     lY = usCenterY;
  1465.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1466.     {
  1467.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1468.         m_pRenderer->SetAmbient(200,0,0,255);
  1469.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1470.         m_pRenderer->SetAmbient(0,0,200,255);
  1471.     }
  1472.     else
  1473.     {
  1474.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1475.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1476.     }
  1477.  
  1478.     Tmp = pTrans->Translate("Credits");
  1479.     lY = usCenterY + 20;
  1480.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1481.     {
  1482.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1483.         m_pRenderer->SetAmbient(200,0,0,255);
  1484.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1485.         m_pRenderer->SetAmbient(0,0,200,255);
  1486.     }
  1487.     else
  1488.     {
  1489.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1490.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1491.     }
  1492.  
  1493.     Tmp = pTrans->Translate("Exit");
  1494.     lY = usCenterY + 40;
  1495.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1496.     {
  1497.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1498.         m_pRenderer->SetAmbient(200,0,0,255);
  1499.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1500.         m_pRenderer->SetAmbient(0,0,200,255);
  1501.     }
  1502.     else
  1503.     {
  1504.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1505.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1506.     }
  1507.  
  1508.     m_pRenderer->DisableBlending();
  1509. }
  1510.  
  1511. void FRApp::RenderOptionsMenu(void)
  1512. {
  1513.     UInt32 ulMouseX, ulMouseY;
  1514.     Int32 lX, lY;
  1515.     UInt16 usCenterX, usCenterY;
  1516.     TETranslator* pTrans = TETranslator::GetTranslator();
  1517.     TEString Tmp;
  1518.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  1519.  
  1520.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1521.  
  1522.     usCenterX = m_usScreenWidth / 2;
  1523.     usCenterY = m_usScreenHeight / 2;
  1524.  
  1525.     m_pRenderer->EnableBlending();
  1526.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  1527.  
  1528.     m_pRenderer->SetAmbient(255,255,255,255);
  1529.     m_pRenderer->SetTexture(m_pMenuBackground);
  1530.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  1531.  
  1532.     m_pRenderer->SetAmbient(0,0,200,255);
  1533.  
  1534.     Tmp = pTrans->Translate("Video");
  1535.     lY = usCenterY - 60;
  1536.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1537.     {
  1538.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1539.         m_pRenderer->SetAmbient(200,0,0,255);
  1540.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1541.         m_pRenderer->SetAmbient(0,0,200,255);
  1542.     }
  1543.     else
  1544.     {
  1545.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1546.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1547.     }
  1548.  
  1549.     Tmp = pTrans->Translate("Audio");
  1550.     lY = usCenterY - 40;
  1551.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1552.     {
  1553.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1554.         m_pRenderer->SetAmbient(200,0,0,255);
  1555.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1556.         m_pRenderer->SetAmbient(0,0,200,255);
  1557.     }
  1558.     else
  1559.     {
  1560.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1561.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1562.     }
  1563.  
  1564.     Tmp = pTrans->Translate("Input");
  1565.     lY = usCenterY - 20;
  1566.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1567.     {
  1568.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1569.         m_pRenderer->SetAmbient(200,0,0,255);
  1570.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1571.         m_pRenderer->SetAmbient(0,0,200,255);
  1572.     }
  1573.     else
  1574.     {
  1575.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1576.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1577.     }
  1578.  
  1579.     lY = usCenterY + 20;
  1580.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1581.     {
  1582.         Tmp = pTrans->Translate("Player Name: ") + m_PlayerName + "_";
  1583.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1584.         m_pRenderer->SetAmbient(200,0,0,255);
  1585.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1586.         m_pRenderer->SetAmbient(0,0,200,255);
  1587.     }
  1588.     else
  1589.     {
  1590.         Tmp = pTrans->Translate("Player Name: ") + m_PlayerName;
  1591.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1592.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1593.     }
  1594.  
  1595.     if(!m_bPlayIntro)
  1596.         Tmp = pTrans->Translate("Don't Play Intro");
  1597.     else Tmp = pTrans->Translate("Play Intro");
  1598.     lY = usCenterY+40;
  1599.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1600.     {
  1601.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1602.         m_pRenderer->SetAmbient(200,0,0,255);
  1603.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1604.         m_pRenderer->SetAmbient(0,0,200,255);
  1605.     }
  1606.     else
  1607.     {
  1608.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1609.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1610.     }
  1611.  
  1612.     Tmp = pTrans->Translate("Language: English");
  1613.     lY = usCenterY+60;
  1614.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1615.     {
  1616.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1617.         m_pRenderer->SetAmbient(200,0,0,255);
  1618.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1619.         m_pRenderer->SetAmbient(0,0,200,255);
  1620.     }
  1621.     else
  1622.     {
  1623.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1624.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1625.     }
  1626.  
  1627.     if(!m_bShowTacho)
  1628.         Tmp = pTrans->Translate("Don't Show Speedometer");
  1629.     else Tmp = pTrans->Translate("Show Speedometer");
  1630.     lY = usCenterY+80;
  1631.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1632.     {
  1633.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1634.         m_pRenderer->SetAmbient(200,0,0,255);
  1635.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1636.         m_pRenderer->SetAmbient(0,0,200,255);
  1637.     }
  1638.     else
  1639.     {
  1640.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1641.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1642.     }
  1643.  
  1644.     if(!m_bCamAnimation)
  1645.         Tmp = pTrans->Translate("Camera: Static");
  1646.     else Tmp = pTrans->Translate("Camera: Animated");
  1647.     lY = usCenterY+100;
  1648.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1649.     {
  1650.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1651.         m_pRenderer->SetAmbient(200,0,0,255);
  1652.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1653.         m_pRenderer->SetAmbient(0,0,200,255);
  1654.     }
  1655.     else
  1656.     {
  1657.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1658.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1659.     }
  1660.  
  1661.     Tmp = pTrans->Translate("Done");
  1662.     lY = usCenterY+120;
  1663.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1664.     {
  1665.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1666.         m_pRenderer->SetAmbient(200,0,0,255);
  1667.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1668.         m_pRenderer->SetAmbient(0,0,200,255);
  1669.  
  1670.         if(bMouseButton)
  1671.         {
  1672.             SaveConfig();
  1673.             m_GameState = MAINMENU;
  1674.         }
  1675.     }
  1676.     else
  1677.     {
  1678.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1679.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1680.     }
  1681.  
  1682.     m_pRenderer->DisableBlending();
  1683. }
  1684.  
  1685. void FRApp::RenderVideoMenu(void)
  1686. {
  1687.     UInt32 ulMouseX, ulMouseY;
  1688.     Int32 lX, lY;
  1689.     UInt16 usCenterX, usCenterY;
  1690.     TETranslator* pTrans = TETranslator::GetTranslator();
  1691.     TEString Tmp;
  1692.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  1693.  
  1694.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1695.  
  1696.     usCenterX = m_usScreenWidth / 2;
  1697.     usCenterY = m_usScreenHeight / 2;
  1698.  
  1699.     m_pRenderer->EnableBlending();
  1700.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  1701.  
  1702.     m_pRenderer->SetAmbient(255,255,255,255);
  1703.     m_pRenderer->SetTexture(m_pMenuBackground);
  1704.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  1705.  
  1706.     m_pRenderer->SetAmbient(0,0,200,255);
  1707.  
  1708.     Tmp = pTrans->Translate("640x480");
  1709.     lY = usCenterY - 60;
  1710.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && ulMouseX < usCenterX)
  1711.     {
  1712.         lX = usCenterX - 5 - (Int32) (Tmp.GetLength() * 15.3f);
  1713.         m_pRenderer->SetAmbient(200,0,0,255);
  1714.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1715.         m_pRenderer->SetAmbient(0,0,200,255);
  1716.     }
  1717.     else if(m_usScreenWidth == 640)
  1718.     {
  1719.         lX = usCenterX - 5 - (Int32) (Tmp.GetLength() * 13.6f);
  1720.         m_pRenderer->SetAmbient(0,100,0,255);
  1721.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1722.         m_pRenderer->SetAmbient(0,0,200,255);
  1723.     }
  1724.     else
  1725.     {
  1726.         lX = usCenterX - 5 - (Int32) (Tmp.GetLength() * 13.6f);
  1727.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1728.     }
  1729.  
  1730.     Tmp = pTrans->Translate("800x600");
  1731.     lY = usCenterY - 60;
  1732.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && ulMouseX > usCenterX)
  1733.     {
  1734.         m_pRenderer->SetAmbient(200,0,0,255);
  1735.         m_pRenderer->DrawText(usCenterX+3, lY-1, 18, Tmp);
  1736.         m_pRenderer->SetAmbient(0,0,200,255);
  1737.     }
  1738.     else if(m_usScreenWidth == 800)
  1739.     {
  1740.         m_pRenderer->SetAmbient(0,100,0,255);
  1741.         m_pRenderer->DrawText(usCenterX+5, lY, 16, Tmp);
  1742.         m_pRenderer->SetAmbient(0,0,200,255);
  1743.     }
  1744.     else
  1745.         m_pRenderer->DrawText(usCenterX+5, lY, 16, Tmp);
  1746.  
  1747.     Tmp = pTrans->Translate("1024x768");
  1748.     lY = usCenterY - 40;
  1749.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && ulMouseX < usCenterX)
  1750.     {
  1751.         lX = usCenterX - 5 - (Int32) (Tmp.GetLength() * 15.3f);
  1752.         m_pRenderer->SetAmbient(200,0,0,255);
  1753.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1754.         m_pRenderer->SetAmbient(0,0,200,255);
  1755.     }
  1756.     else if(m_usScreenWidth == 1024)
  1757.     {
  1758.         lX = usCenterX - 5 - (Int32) (Tmp.GetLength() * 13.6f);
  1759.         m_pRenderer->SetAmbient(0,100,0,255);
  1760.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1761.         m_pRenderer->SetAmbient(0,0,200,255);
  1762.     }
  1763.     else
  1764.     {
  1765.         lX = usCenterX - 5 - (Int32) (Tmp.GetLength() * 13.6f);
  1766.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1767.     }
  1768.  
  1769.     Tmp = pTrans->Translate("1280x1024");
  1770.     lY = usCenterY - 40;
  1771.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && ulMouseX > usCenterX)
  1772.     {
  1773.         m_pRenderer->SetAmbient(200,0,0,255);
  1774.         m_pRenderer->DrawText(usCenterX+3, lY-1, 18, Tmp);
  1775.         m_pRenderer->SetAmbient(0,0,200,255);
  1776.     }
  1777.     else if(m_usScreenWidth == 1280)
  1778.     {
  1779.         m_pRenderer->SetAmbient(0,100,0,255);
  1780.         m_pRenderer->DrawText(usCenterX+5, lY, 16, Tmp);
  1781.         m_pRenderer->SetAmbient(0,0,200,255);
  1782.     }
  1783.     else
  1784.         m_pRenderer->DrawText(usCenterX+5, lY, 16, Tmp);
  1785.  
  1786.     if(m_usScreenBpp != 0)
  1787.     {
  1788.         if(m_usScreenBpp == 32)    Tmp = pTrans->Translate("Color Depth: 32Bit");
  1789.         else Tmp = pTrans->Translate("Color Depth: 16Bit");
  1790.         
  1791.         lY = usCenterY - 20;
  1792.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1793.         {
  1794.             lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1795.             m_pRenderer->SetAmbient(200,0,0,255);
  1796.             m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1797.             m_pRenderer->SetAmbient(0,0,200,255);
  1798.         }
  1799.         else
  1800.         {
  1801.             lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1802.             m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1803.         }
  1804.     }
  1805.  
  1806.     if(m_usScreenBpp == 0)
  1807.         Tmp = pTrans->Translate("In Window");
  1808.     else Tmp = pTrans->Translate("Fullscreen");
  1809.     lY = usCenterY;
  1810.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1811.     {
  1812.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1813.         m_pRenderer->SetAmbient(200,0,0,255);
  1814.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1815.         m_pRenderer->SetAmbient(0,0,200,255);
  1816.     }
  1817.     else
  1818.     {
  1819.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1820.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1821.     }
  1822.  
  1823.     switch(m_Details){
  1824.     case VERYHIGH:
  1825.         Tmp = pTrans->Translate("Details: Very High");
  1826.         break;
  1827.     case HIGH:
  1828.         Tmp = pTrans->Translate("Details: High");
  1829.         break;
  1830.     case MEDIUM:
  1831.         Tmp = pTrans->Translate("Details: Medium");
  1832.         break;
  1833.     case LOW:
  1834.         Tmp = pTrans->Translate("Details: Low");
  1835.         break;
  1836.     case VERYLOW:
  1837.         Tmp = pTrans->Translate("Details: Very Low");
  1838.         break;
  1839.     };
  1840.     lY = usCenterY+20;
  1841.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1842.     {
  1843.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1844.         m_pRenderer->SetAmbient(200,0,0,255);
  1845.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1846.         m_pRenderer->SetAmbient(0,0,200,255);
  1847.     }
  1848.     else
  1849.     {
  1850.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1851.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1852.     }
  1853.  
  1854.     if(m_bUseMirror)
  1855.         Tmp = pTrans->Translate("Rearview Mirror");
  1856.     else Tmp = pTrans->Translate("No Rearview Mirror");
  1857.     lY = usCenterY+40;
  1858.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1859.     {
  1860.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1861.         m_pRenderer->SetAmbient(200,0,0,255);
  1862.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1863.         m_pRenderer->SetAmbient(0,0,200,255);
  1864.     }
  1865.     else
  1866.     {
  1867.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1868.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1869.     }
  1870.  
  1871.  
  1872.     Tmp = pTrans->Translate("Done");
  1873.     lY = usCenterY+60;
  1874.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1875.     {
  1876.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1877.         m_pRenderer->SetAmbient(200,0,0,255);
  1878.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1879.         m_pRenderer->SetAmbient(0,0,200,255);
  1880.  
  1881.         if(bMouseButton)
  1882.         {
  1883.             UInt16 usW, usH, usB;
  1884.             m_pRenderer->GetResolution(usW, usH, usB);
  1885.  
  1886.             if(usW != m_usScreenWidth || usH != m_usScreenHeight || usB != m_usScreenBpp)
  1887.                 m_pRenderer->SetResolution(m_usScreenWidth, m_usScreenHeight, m_usScreenBpp);
  1888.  
  1889.             ApplyDetailSettings();
  1890.             SaveConfig();
  1891.             m_GameState = MAINMENU;
  1892.         }
  1893.     }
  1894.     else
  1895.     {
  1896.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1897.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1898.     }
  1899.  
  1900.     m_pRenderer->DisableBlending();
  1901. }
  1902.  
  1903. void FRApp::RenderAudioMenu(void)
  1904. {
  1905.     UInt32 ulMouseX, ulMouseY;
  1906.     Int32 lX, lY;
  1907.     UInt16 usCenterX, usCenterY;
  1908.     TETranslator* pTrans = TETranslator::GetTranslator();
  1909.     TEString Tmp;
  1910.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  1911.  
  1912.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  1913.  
  1914.     usCenterX = m_usScreenWidth / 2;
  1915.     usCenterY = m_usScreenHeight / 2;
  1916.  
  1917.     m_pRenderer->EnableBlending();
  1918.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  1919.  
  1920.     m_pRenderer->SetAmbient(255,255,255,255);
  1921.     m_pRenderer->SetTexture(m_pMenuBackground);
  1922.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  1923.  
  1924.     m_pRenderer->SetAmbient(0,0,200,255);
  1925.  
  1926.     Tmp = pTrans->Translate("General Volume");
  1927.     m_pRenderer->DrawText(usCenterX - (Int32) (Tmp.GetLength() * 6.8f), usCenterY-60, 16, Tmp);
  1928.  
  1929.     m_pRenderer->SetTexture(NULL);
  1930.     lY = usCenterY-30;
  1931.     if((Int32) ulMouseY >= lY - 20 && (Int32) ulMouseY <= lY)
  1932.         m_pRenderer->SetAmbient(200,0,0,255);
  1933.  
  1934.     m_pRenderer->DrawLine(usCenterX-52, lY, usCenterX+52, lY, 1.0f);
  1935.     m_pRenderer->DrawLine(usCenterX-52, lY-10, usCenterX-52, lY+1, 2.0f);
  1936.     m_pRenderer->DrawLine(usCenterX+52, lY-10, usCenterX+52, lY+1, 2.0f);
  1937.  
  1938.     m_pRenderer->SetAmbient(0,100,0,255);
  1939.     lX = usCenterX - 50 + (UInt32) (25*m_fGeneralVolume);
  1940.     m_pRenderer->DrawLine(lX, lY-10, lX, lY, 2.0f);
  1941.     m_pRenderer->SetAmbient(0,0,200,255);
  1942.  
  1943.     Tmp = pTrans->Translate("Music Volume");
  1944.     m_pRenderer->DrawText(usCenterX - (Int32) (Tmp.GetLength() * 6.8f), usCenterY-20, 16, Tmp);
  1945.  
  1946.     m_pRenderer->SetTexture(NULL);
  1947.     lY = usCenterY+10;
  1948.     if((Int32) ulMouseY >= lY - 20 && (Int32) ulMouseY <= lY)
  1949.         m_pRenderer->SetAmbient(200,0,0,255);
  1950.  
  1951.     m_pRenderer->DrawLine(usCenterX-52, lY, usCenterX+52, lY, 1.0f);
  1952.     m_pRenderer->DrawLine(usCenterX-52, lY-10, usCenterX-52, lY+1, 2.0f);
  1953.     m_pRenderer->DrawLine(usCenterX+52, lY-10, usCenterX+52, lY+1, 2.0f);
  1954.  
  1955.     m_pRenderer->SetAmbient(0,100,0,255);
  1956.     lX = usCenterX - 50 + (UInt32) (12.5f*m_fMusicVolume);
  1957.     m_pRenderer->DrawLine(lX, lY-10, lX, lY, 2.0f);
  1958.     m_pRenderer->SetAmbient(0,0,200,255);
  1959.  
  1960.     Tmp = pTrans->Translate("Background Music:");
  1961.     m_pRenderer->DrawText(usCenterX - (Int32) (Tmp.GetLength() * 6.8f), usCenterY+20, 16, Tmp);
  1962.  
  1963.     switch(m_Music){
  1964.     case DEFAULT:
  1965.         Tmp = pTrans->Translate("Default Game Music");
  1966.         break;
  1967.     case FROMCD:
  1968.         Tmp = pTrans->Translate("From CD");
  1969.         break;
  1970.     case NONE:
  1971.         Tmp = pTrans->Translate("None");
  1972.         break;
  1973.     };
  1974.     lY = usCenterY+40;
  1975.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1976.     {
  1977.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1978.         m_pRenderer->SetAmbient(200,0,0,255);
  1979.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1980.         m_pRenderer->SetAmbient(0,0,200,255);
  1981.     }
  1982.     else
  1983.     {
  1984.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  1985.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  1986.     }
  1987.  
  1988.     Tmp = pTrans->Translate("Done");
  1989.     lY = usCenterY+60;
  1990.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  1991.     {
  1992.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  1993.         m_pRenderer->SetAmbient(200,0,0,255);
  1994.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  1995.         m_pRenderer->SetAmbient(0,0,200,255);
  1996.  
  1997.         if(bMouseButton)
  1998.         {
  1999.             m_GameState = MAINMENU;
  2000.             m_pSoundDevice->SetVolume(m_fGeneralVolume);
  2001.             SaveConfig();
  2002.         }
  2003.     }
  2004.     else
  2005.     {
  2006.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2007.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2008.     }
  2009.  
  2010.     m_pRenderer->DisableBlending();
  2011. }
  2012.  
  2013. void FRApp::RenderInputMenu1(void)
  2014. {
  2015.     UInt32 ulMouseX, ulMouseY, ulCount;
  2016.     Int32 lX, lY;
  2017.     UInt16 usCenterX, usCenterY;
  2018.     TETranslator* pTrans = TETranslator::GetTranslator();
  2019.     TEString Tmp, aCom[6];
  2020.     Char acArrow[2] = {31,'\0'};
  2021.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  2022.  
  2023.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2024.  
  2025.     usCenterX = m_usScreenWidth / 2;
  2026.     usCenterY = m_usScreenHeight / 2;
  2027.  
  2028.     m_pRenderer->EnableBlending();
  2029.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2030.  
  2031.     m_pRenderer->SetAmbient(255,255,255,255);
  2032.     m_pRenderer->SetTexture(m_pMenuBackground);
  2033.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2034.  
  2035.     m_pRenderer->SetAmbient(0,0,200,255);
  2036.  
  2037.     aCom[0] = pTrans->Translate("Accelerate");
  2038.     aCom[1] = pTrans->Translate("Brake");
  2039.     aCom[2] = pTrans->Translate("Steer Left");
  2040.     aCom[3] = pTrans->Translate("Steer Right");
  2041.     aCom[4] = pTrans->Translate("Handbrake");
  2042.     aCom[5] = pTrans->Translate("Horn");
  2043.  
  2044.     for(ulCount = 0; ulCount < 6; ulCount++)
  2045.     {
  2046.         Tmp = m_pInputDevices->GetKeyName(m_aulKeys[ulCount]);
  2047.         lY = usCenterY-80+20*ulCount;
  2048.         lX = usCenterX - 175;
  2049.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2050.         {
  2051.             Tmp = Tmp + "_";
  2052.             m_pRenderer->DrawText(lX, lY, 16, aCom[ulCount]);
  2053.             m_pRenderer->SetAmbient(200,0,0,255);
  2054.             m_pRenderer->DrawText(usCenterX+10, lY-1, 18, Tmp);
  2055.             m_pRenderer->SetAmbient(0,0,200,255);
  2056.         }
  2057.         else
  2058.         {
  2059.             m_pRenderer->DrawText(lX, lY, 16, aCom[ulCount]);
  2060.             m_pRenderer->DrawText(usCenterX+11, lY, 16, Tmp);
  2061.         }
  2062.     }
  2063.  
  2064.     lY = usCenterY+40;
  2065.     lX = usCenterX+120;
  2066.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2067.     {
  2068.         m_pRenderer->SetAmbient(200,0,0,255);
  2069.         m_pRenderer->DrawText(lX-1, lY-1, 16, acArrow);
  2070.         m_pRenderer->SetAmbient(0,0,200,255);
  2071.     }
  2072.     else
  2073.         m_pRenderer->DrawText(lX, lY, 14, acArrow);
  2074.  
  2075.     Tmp = pTrans->Translate("Done");
  2076.     lY = usCenterY+60;
  2077.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2078.     {
  2079.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2080.         m_pRenderer->SetAmbient(200,0,0,255);
  2081.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  2082.         m_pRenderer->SetAmbient(0,0,200,255);
  2083.  
  2084.         if(bMouseButton)
  2085.         {
  2086.             m_GameState = MAINMENU;
  2087.             SaveConfig();
  2088.         }
  2089.     }
  2090.     else
  2091.     {
  2092.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2093.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2094.     }
  2095.  
  2096.     m_pRenderer->DisableBlending();
  2097. }
  2098.  
  2099. void FRApp::RenderInputMenu2(void)
  2100. {
  2101.     UInt32 ulMouseX, ulMouseY, ulCount;
  2102.     Int32 lX, lY;
  2103.     UInt16 usCenterX, usCenterY;
  2104.     TETranslator* pTrans = TETranslator::GetTranslator();
  2105.     TEString Tmp, aCom[5];
  2106.     Char acArrow[2] = {30,'\0'};
  2107.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  2108.  
  2109.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2110.  
  2111.     usCenterX = m_usScreenWidth / 2;
  2112.     usCenterY = m_usScreenHeight / 2;
  2113.  
  2114.     m_pRenderer->EnableBlending();
  2115.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2116.  
  2117.     m_pRenderer->SetAmbient(255,255,255,255);
  2118.     m_pRenderer->SetTexture(m_pMenuBackground);
  2119.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2120.  
  2121.     m_pRenderer->SetAmbient(0,0,200,255);
  2122.  
  2123.     lY = usCenterY-80;
  2124.     lX = usCenterX+120;
  2125.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2126.     {
  2127.         m_pRenderer->SetAmbient(200,0,0,255);
  2128.         m_pRenderer->DrawText(lX-1, lY-1, 16, acArrow);
  2129.         m_pRenderer->SetAmbient(0,0,200,255);
  2130.  
  2131.     }
  2132.     else
  2133.         m_pRenderer->DrawText(lX, lY, 14, acArrow);
  2134.  
  2135.     aCom[0] = pTrans->Translate("Use Powerup");
  2136.     aCom[1] = pTrans->Translate("Reset");
  2137.     aCom[2] = pTrans->Translate("Cam Position");
  2138.     aCom[3] = pTrans->Translate("Look Back");
  2139.     aCom[4] = pTrans->Translate("Screenshot");
  2140.  
  2141.     for(ulCount = 0; ulCount < 5; ulCount++)
  2142.     {
  2143.         Tmp = m_pInputDevices->GetKeyName(m_aulKeys[ulCount+6]);
  2144.         lY = usCenterY-60+20*ulCount;
  2145.         lX = usCenterX - 175;
  2146.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2147.         {
  2148.             Tmp = Tmp + "_";
  2149.             m_pRenderer->DrawText(lX, lY, 16, aCom[ulCount]);
  2150.             m_pRenderer->SetAmbient(200,0,0,255);
  2151.             m_pRenderer->DrawText(usCenterX+10, lY-1, 18, Tmp);
  2152.             m_pRenderer->SetAmbient(0,0,200,255);
  2153.         }
  2154.         else
  2155.         {
  2156.             m_pRenderer->DrawText(lX, lY, 16, aCom[ulCount]);
  2157.             m_pRenderer->DrawText(usCenterX+11, lY, 16, Tmp);
  2158.         }
  2159.     }
  2160.  
  2161.  
  2162.     lY = usCenterY+40;
  2163.     lX = usCenterX+120;
  2164.     acArrow[0] = 31;
  2165.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2166.     {
  2167.         m_pRenderer->SetAmbient(200,0,0,255);
  2168.         m_pRenderer->DrawText(lX-1, lY-1, 16, acArrow);
  2169.         m_pRenderer->SetAmbient(0,0,200,255);
  2170.     }
  2171.     else
  2172.         m_pRenderer->DrawText(lX, lY, 14, acArrow);
  2173.  
  2174.     Tmp = pTrans->Translate("Done");
  2175.     lY = usCenterY+60;
  2176.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2177.     {
  2178.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2179.         m_pRenderer->SetAmbient(200,0,0,255);
  2180.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  2181.         m_pRenderer->SetAmbient(0,0,200,255);
  2182.  
  2183.         if(bMouseButton)
  2184.         {
  2185.             m_GameState = MAINMENU;
  2186.             SaveConfig();
  2187.         }
  2188.     }
  2189.     else
  2190.     {
  2191.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2192.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2193.     }
  2194.  
  2195.     m_pRenderer->DisableBlending();
  2196. }
  2197.  
  2198. void FRApp::RenderInputMenu3(void)
  2199. {
  2200.     UInt32 ulMouseX, ulMouseY;
  2201.     Int32 lX, lY;
  2202.     UInt16 usCenterX, usCenterY;
  2203.     TETranslator* pTrans = TETranslator::GetTranslator();
  2204.     TEString Tmp;
  2205.     Char acArrow[2] = {30,'\0'};
  2206.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  2207.  
  2208.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2209.  
  2210.     usCenterX = m_usScreenWidth / 2;
  2211.     usCenterY = m_usScreenHeight / 2;
  2212.  
  2213.     m_pRenderer->EnableBlending();
  2214.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2215.  
  2216.     m_pRenderer->SetAmbient(255,255,255,255);
  2217.     m_pRenderer->SetTexture(m_pMenuBackground);
  2218.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2219.  
  2220.     m_pRenderer->SetAmbient(0,0,200,255);
  2221.  
  2222.     lY = usCenterY-80;
  2223.     lX = usCenterX+120;
  2224.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2225.     {
  2226.         m_pRenderer->SetAmbient(200,0,0,255);
  2227.         m_pRenderer->DrawText(lX-1, lY-1, 16, acArrow);
  2228.         m_pRenderer->SetAmbient(0,0,200,255);
  2229.  
  2230.     }
  2231.     else
  2232.         m_pRenderer->DrawText(lX, lY, 14, acArrow);
  2233.  
  2234.     if(m_bUseJoystick)
  2235.         Tmp = pTrans->Translate("Disable Joystick");
  2236.     else Tmp = pTrans->Translate("Enable Joystick");
  2237.     lY = usCenterY-40;
  2238.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2239.     {
  2240.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2241.         m_pRenderer->SetAmbient(200,0,0,255);
  2242.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  2243.         m_pRenderer->SetAmbient(0,0,200,255);
  2244.     }
  2245.     else
  2246.     {
  2247.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2248.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2249.     }
  2250.     
  2251.     if(m_bUseJoystick)
  2252.     {
  2253.         switch(m_JoystickAccel){
  2254.         case YAXIS:
  2255.             Tmp = pTrans->Translate("Gas Pedal: Y-Axis");
  2256.             break;
  2257.         case ZAXIS:
  2258.             Tmp = pTrans->Translate("Gas Pedal: Z-Axis");
  2259.             break;
  2260.         case NOAXIS:
  2261.             Tmp = pTrans->Translate("Gas Pedal: None");
  2262.             break;
  2263.         };
  2264.         lY = usCenterY-20;
  2265.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2266.         {
  2267.             lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2268.             m_pRenderer->SetAmbient(200,0,0,255);
  2269.             m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  2270.             m_pRenderer->SetAmbient(0,0,200,255);
  2271.         }
  2272.         else
  2273.         {
  2274.             lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2275.             m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2276.         }
  2277.  
  2278.         Tmp = pTrans->Translate("Joystick Sensitivity");
  2279.         m_pRenderer->DrawText(usCenterX - (Int32) (Tmp.GetLength() * 6.8f), usCenterY + 10, 16, Tmp);
  2280.         
  2281.         m_pRenderer->SetTexture(NULL);
  2282.         lY = usCenterY+40;
  2283.         if((Int32) ulMouseY >= lY - 20 && (Int32) ulMouseY <= lY)
  2284.             m_pRenderer->SetAmbient(200,0,0,255);
  2285.         
  2286.         m_pRenderer->DrawLine(usCenterX-52, lY, usCenterX+52, lY, 1.0f);
  2287.         m_pRenderer->DrawLine(usCenterX-52, lY-10, usCenterX-52, lY+1, 2.0f);
  2288.         m_pRenderer->DrawLine(usCenterX+52, lY-10, usCenterX+52, lY+1, 2.0f);
  2289.         
  2290.         m_pRenderer->SetAmbient(0,100,0,255);
  2291.         lX = usCenterX - 50 + (UInt32) (25*m_fJoystickSensitivity);
  2292.         m_pRenderer->DrawLine(lX, lY-10, lX, lY, 2.0f);
  2293.         m_pRenderer->SetAmbient(0,0,200,255);
  2294.     }
  2295.  
  2296.     Tmp = pTrans->Translate("Done");
  2297.     lY = usCenterY+60;
  2298.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2299.     {
  2300.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2301.         m_pRenderer->SetAmbient(200,0,0,255);
  2302.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  2303.         m_pRenderer->SetAmbient(0,0,200,255);
  2304.  
  2305.         if(bMouseButton)
  2306.         {
  2307.             m_GameState = MAINMENU;
  2308.             SaveConfig();
  2309.         }
  2310.     }
  2311.     else
  2312.     {
  2313.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2314.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2315.     }
  2316.  
  2317.     m_pRenderer->DisableBlending();
  2318. }
  2319.  
  2320. void FRApp::RenderCareerMenu(void)
  2321. {
  2322.     UInt32 ulMouseX, ulMouseY;
  2323.     Int32 lX, lY;
  2324.     UInt16 usCenterX, usCenterY;
  2325.     TETranslator* pTrans = TETranslator::GetTranslator();
  2326.     TEString Tmp;
  2327.  
  2328.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2329.  
  2330.     usCenterX = m_usScreenWidth / 2;
  2331.     usCenterY = m_usScreenHeight / 2;
  2332.  
  2333.     m_pRenderer->EnableBlending();
  2334.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2335.  
  2336.     m_pRenderer->SetAmbient(255,255,255,255);
  2337.     m_pRenderer->SetTexture(m_pMenuBackground);
  2338.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2339.  
  2340.     m_pRenderer->SetAmbient(0,0,200,255);
  2341.  
  2342.     Tmp = pTrans->Translate("Difficulty:");
  2343.     lY = usCenterY-40;
  2344.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2345.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2346.  
  2347.     Tmp = pTrans->Translate("Medium");
  2348.     lY = usCenterY-10;
  2349.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2350.  
  2351.     if(m_usDifficulty == 2)
  2352.     {
  2353.         m_pRenderer->SetAmbient(0,100,0,255);
  2354.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2355.         m_pRenderer->SetAmbient(0,0,200,255);
  2356.     }
  2357.     else m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2358.  
  2359.     Tmp = pTrans->Translate("Easy");
  2360.     lX = usCenterX - 120 - (Int32) (Tmp.GetLength() * 13.6f);
  2361.  
  2362.     if(m_usDifficulty == 1)
  2363.     {
  2364.         m_pRenderer->SetAmbient(0,100,0,255);
  2365.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2366.         m_pRenderer->SetAmbient(0,0,200,255);
  2367.     }
  2368.     else m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2369.  
  2370.     Tmp = pTrans->Translate("Hard");
  2371.     lX = usCenterX + 120;
  2372.  
  2373.     if(m_usDifficulty == 3)
  2374.     {
  2375.         m_pRenderer->SetAmbient(0,100,0,255);
  2376.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2377.         m_pRenderer->SetAmbient(0,0,200,255);
  2378.     }
  2379.     else m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2380.         
  2381.  
  2382.     if(m_pCareer != NULL)
  2383.     {
  2384.         Tmp = pTrans->Translate("Continue Career");
  2385.         lY = usCenterY+90;
  2386.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 20)
  2387.         {
  2388.             lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2389.             m_pRenderer->SetAmbient(200,0,0,255);
  2390.             m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2391.             m_pRenderer->SetAmbient(0,0,200,255);
  2392.         }
  2393.         else
  2394.         {
  2395.             lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2396.             m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2397.         }
  2398.     }
  2399.  
  2400.     Tmp = pTrans->Translate("Cancel");
  2401.     lY = usCenterY+150;
  2402.     lX = usCenterX - 10 - (UInt16) (Tmp.GetLength() * 15.3f);
  2403.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 20 &&
  2404.         (Int32) ulMouseX < usCenterX)
  2405.     {
  2406.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  2407.         m_pRenderer->SetAmbient(200,0,0,255);
  2408.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2409.         m_pRenderer->SetAmbient(0,0,200,255);
  2410.     }
  2411.     else
  2412.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2413.  
  2414.     Tmp = pTrans->Translate("Start New Career");
  2415.     lY = usCenterY+150;
  2416.     lX = usCenterX+10;
  2417.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 20 &&
  2418.         (Int32) ulMouseX > usCenterX)
  2419.     {
  2420.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  2421.         m_pRenderer->SetAmbient(200,0,0,255);
  2422.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2423.         m_pRenderer->SetAmbient(0,0,200,255);
  2424.     }
  2425.     else
  2426.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2427.  
  2428.     m_pRenderer->DisableBlending();
  2429. }
  2430.  
  2431. void FRApp::RenderCareerRaceMenu(void)
  2432. {
  2433.  
  2434.     UInt32 ulMouseX, ulMouseY;
  2435.     Int32 lX, lY;
  2436.     UInt16 usCenterX, usCenterY;
  2437.     TETranslator* pTrans = TETranslator::GetTranslator();
  2438.     TEString Tmp;
  2439.     Char acTmp[32];
  2440.  
  2441.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2442.  
  2443.     usCenterX = m_usScreenWidth / 2;
  2444.     usCenterY = m_usScreenHeight / 2;
  2445.  
  2446.     m_pRenderer->EnableBlending();
  2447.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2448.  
  2449.     m_pRenderer->SetAmbient(255,255,255,255);
  2450.     m_pRenderer->SetTexture(m_pMenuBackground);
  2451.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2452.  
  2453.     m_pRenderer->SetTexture(m_apTrackImages[m_pCareer->aulTrack[m_pCareer->ulCurrRace]]);
  2454.     m_pRenderer->DrawRectangle(usCenterX-35, usCenterY-35, usCenterX+35, usCenterY+35);
  2455.  
  2456.     m_pRenderer->SetAmbient(0,100,0,255);
  2457.  
  2458.     Tmp = ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_Title;
  2459.     lY = usCenterY-80;
  2460.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2461.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2462.  
  2463.     m_pRenderer->SetAmbient(0,0,200,255);
  2464.  
  2465.     Tmp = pTrans->Translate("Next Race:");
  2466.     lY = usCenterY-100;
  2467.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2468.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2469.  
  2470.     m_CurrGameType = ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_GameType;
  2471.     Tmp = "";
  2472.     Tmp = Tmp + "[" + GetGameTypeName(m_CurrGameType) + "]";
  2473.     Tmp.MakeUpperCase();
  2474.     lY = usCenterY-60;
  2475.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2476.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2477.  
  2478.  
  2479.     Tmp = pTrans->Translate(ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_aInfo[0]);
  2480.     lY = usCenterY+45;
  2481.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2482.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2483.  
  2484.     Tmp = pTrans->Translate(ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_aInfo[1]);
  2485.     lY = usCenterY+63;
  2486.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2487.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2488.  
  2489.     Tmp = pTrans->Translate(ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_aInfo[2]);
  2490.     lY = usCenterY+81;
  2491.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2492.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2493.  
  2494.     if(!ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_bForceCar)
  2495.     {
  2496.         Char acArrowLeft[2] = {17,'\0'};
  2497.         Char acArrowRight[2] = {16,'\0'};
  2498.  
  2499.         lY = usCenterY+130;
  2500.         lX = usCenterX-180;
  2501.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2502.         {
  2503.             m_pRenderer->SetAmbient(200,0,0,255);
  2504.             m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2505.             m_pRenderer->SetAmbient(0,0,200,255);
  2506.         }
  2507.         else m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2508.         
  2509.         lX = usCenterX+180;
  2510.         if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2511.         {
  2512.             m_pRenderer->SetAmbient(200,0,0,255);
  2513.             m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2514.             m_pRenderer->SetAmbient(0,0,200,255);
  2515.         }
  2516.         else m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2517.     }
  2518.     else m_CurrCar = ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace]].m_ForcedCar;
  2519.  
  2520.     Tmp = pTrans->Translate("Car:");
  2521.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2522.     lY = usCenterY + 110;
  2523.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2524.  
  2525.     Tmp = GetCarName(m_CurrCar);
  2526.     Tmp.MakeUpperCase();
  2527.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2528.     lY = usCenterY + 130;
  2529.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2530.  
  2531.     m_ulNumLaps = 3 + (UInt32) (m_pCareer->ulCurrRace * 0.5f);
  2532.     m_ulNumLaps = m_ulNumLaps + (UInt32) (m_ulNumLaps * (m_pCareer->usDifficulty-1) * 0.5f);
  2533.  
  2534.     Tmp = pTrans->Translate("Laps:");
  2535.     sprintf(acTmp, "%d", m_ulNumLaps);
  2536.     Tmp = Tmp + acTmp;
  2537.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2538.     lY = usCenterY + 160;
  2539.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2540.  
  2541.     Tmp = pTrans->Translate("Cancel");
  2542.     lY = usCenterY+190;
  2543.     lX = usCenterX - 10 - (UInt16) (Tmp.GetLength() * 15.3f);
  2544.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 20 &&
  2545.         (Int32) ulMouseX < usCenterX)
  2546.     {
  2547.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  2548.         m_pRenderer->SetAmbient(200,0,0,255);
  2549.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2550.         m_pRenderer->SetAmbient(0,0,200,255);
  2551.     }
  2552.     else
  2553.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2554.  
  2555.     Tmp = pTrans->Translate("Continue");
  2556.     lX = usCenterX+10;
  2557.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 20 &&
  2558.         (Int32) ulMouseX > usCenterX)
  2559.     {
  2560.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  2561.         m_pRenderer->SetAmbient(200,0,0,255);
  2562.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2563.         m_pRenderer->SetAmbient(0,0,200,255);
  2564.     }
  2565.     else
  2566.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2567.  
  2568.     m_pRenderer->DisableBlending();
  2569. }
  2570.  
  2571. void FRApp::RenderQuickRaceMenu(void)
  2572. {
  2573.     UInt32 ulMouseX, ulMouseY;
  2574.     Int32 lX, lY;
  2575.     UInt16 usCenterX, usCenterY;
  2576.     TETranslator* pTrans = TETranslator::GetTranslator();
  2577.     TEString Tmp;
  2578.     Char acTmp[32];
  2579.     Char acArrowLeft[2] = {17,'\0'};
  2580.     Char acArrowRight[2] = {16,'\0'};
  2581.  
  2582.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2583.  
  2584.     usCenterX = m_usScreenWidth / 2;
  2585.     usCenterY = m_usScreenHeight / 2;
  2586.  
  2587.     m_pRenderer->EnableBlending();
  2588.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2589.  
  2590.     m_pRenderer->SetAmbient(255,255,255,255);
  2591.     m_pRenderer->SetTexture(m_pMenuBackground);
  2592.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2593.  
  2594.     m_pRenderer->SetTexture(m_apTrackImages[m_ulCurrTrack]);
  2595.     m_pRenderer->DrawRectangle(usCenterX-50, usCenterY+70, usCenterX+50, usCenterY+170);
  2596.  
  2597.     m_pRenderer->SetAmbient(0,0,200,255);
  2598.  
  2599.     Tmp = GetGameTypeName(m_CurrGameType);
  2600.     Tmp.MakeUpperCase();
  2601.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2602.     lY = usCenterY - 95;
  2603.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2604.  
  2605.     lY = usCenterY-95;
  2606.     lX = usCenterX-180;
  2607.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2608.     {
  2609.         m_pRenderer->SetAmbient(200,0,0,255);
  2610.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2611.         m_pRenderer->SetAmbient(0,0,200,255);
  2612.  
  2613.     }
  2614.     else
  2615.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2616.  
  2617.     lY = usCenterY-95;
  2618.     lX = usCenterX+180;
  2619.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2620.     {
  2621.         m_pRenderer->SetAmbient(200,0,0,255);
  2622.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2623.         m_pRenderer->SetAmbient(0,0,200,255);
  2624.  
  2625.     }
  2626.     else
  2627.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2628.  
  2629.     Tmp = pTrans->Translate("Car:");
  2630.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2631.     lY = usCenterY - 70;
  2632.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2633.  
  2634.     Tmp = GetCarName(m_CurrCar);
  2635.     Tmp.MakeUpperCase();
  2636.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2637.     lY = usCenterY - 50;
  2638.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2639.  
  2640.     lY = usCenterY-50;
  2641.     lX = usCenterX-180;
  2642.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2643.     {
  2644.         m_pRenderer->SetAmbient(200,0,0,255);
  2645.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2646.         m_pRenderer->SetAmbient(0,0,200,255);
  2647.  
  2648.     }
  2649.     else
  2650.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2651.  
  2652.     lY = usCenterY-50;
  2653.     lX = usCenterX+180;
  2654.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2655.     {
  2656.         m_pRenderer->SetAmbient(200,0,0,255);
  2657.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2658.         m_pRenderer->SetAmbient(0,0,200,255);
  2659.  
  2660.     }
  2661.     else
  2662.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2663.  
  2664.     Tmp = pTrans->Translate("Laps:");
  2665.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2666.     lY = usCenterY - 25;
  2667.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2668.  
  2669.     sprintf(acTmp, "%d", m_ulNumLaps);
  2670.     Tmp = acTmp;
  2671.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2672.     lY = usCenterY - 5;
  2673.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2674.  
  2675.     lY = usCenterY-5;
  2676.     lX = usCenterX-180;
  2677.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2678.     {
  2679.         m_pRenderer->SetAmbient(200,0,0,255);
  2680.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2681.         m_pRenderer->SetAmbient(0,0,200,255);
  2682.  
  2683.     }
  2684.     else
  2685.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2686.  
  2687.     lY = usCenterY-5;
  2688.     lX = usCenterX+180;
  2689.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2690.     {
  2691.         m_pRenderer->SetAmbient(200,0,0,255);
  2692.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2693.         m_pRenderer->SetAmbient(0,0,200,255);
  2694.  
  2695.     }
  2696.     else
  2697.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2698.  
  2699.  
  2700.     Tmp = pTrans->Translate("Track:");
  2701.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2702.     lY = usCenterY + 20;
  2703.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2704.  
  2705.     Tmp = ms_aacTrackNames[m_ulCurrTrack];
  2706.     Tmp.MakeUpperCase();
  2707.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2708.     lY = usCenterY + 40;
  2709.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2710.  
  2711.     lY = usCenterY+40;
  2712.     lX = usCenterX-180;
  2713.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2714.     {
  2715.         m_pRenderer->SetAmbient(200,0,0,255);
  2716.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2717.         m_pRenderer->SetAmbient(0,0,200,255);
  2718.  
  2719.     }
  2720.     else
  2721.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2722.  
  2723.     lY = usCenterY+40;
  2724.     lX = usCenterX+180;
  2725.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2726.     {
  2727.         m_pRenderer->SetAmbient(200,0,0,255);
  2728.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2729.         m_pRenderer->SetAmbient(0,0,200,255);
  2730.  
  2731.     }
  2732.     else
  2733.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2734.  
  2735.     Tmp = pTrans->Translate("Cancel");
  2736.     lY = usCenterY+180;
  2737.     lX = usCenterX - 10 - (UInt16) (Tmp.GetLength() * 15.3f);
  2738.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  2739.         (Int32) ulMouseX < usCenterX)
  2740.     {
  2741.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  2742.         m_pRenderer->SetAmbient(200,0,0,255);
  2743.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2744.         m_pRenderer->SetAmbient(0,0,200,255);
  2745.     }
  2746.     else
  2747.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2748.  
  2749.     Tmp = pTrans->Translate("Start Race");
  2750.     lY = usCenterY+180;
  2751.     lX = usCenterX+10;
  2752.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  2753.         (Int32) ulMouseX > usCenterX)
  2754.     {
  2755.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  2756.         m_pRenderer->SetAmbient(200,0,0,255);
  2757.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2758.         m_pRenderer->SetAmbient(0,0,200,255);
  2759.     }
  2760.     else
  2761.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2762.  
  2763.     m_pRenderer->DisableBlending();
  2764. }
  2765.  
  2766. void FRApp::RenderNetworkMenu(void)
  2767. {
  2768.     UInt32 ulMouseX, ulMouseY;
  2769.     Int32 lX, lY;
  2770.     UInt16 usCenterX, usCenterY;
  2771.     TETranslator* pTrans = TETranslator::GetTranslator();
  2772.     TEString Tmp;
  2773.  
  2774.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2775.  
  2776.     usCenterX = m_usScreenWidth / 2;
  2777.     usCenterY = m_usScreenHeight / 2;
  2778.  
  2779.     m_pRenderer->EnableBlending();
  2780.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2781.  
  2782.     m_pRenderer->SetAmbient(255,255,255,255);
  2783.     m_pRenderer->SetTexture(m_pMenuBackground);
  2784.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2785.  
  2786.     m_pRenderer->SetAmbient(0,0,200,255);
  2787.  
  2788.     Tmp = pTrans->Translate("Start Game");
  2789.     lY = usCenterY-40;
  2790.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2791.     {
  2792.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2793.         m_pRenderer->SetAmbient(200,0,0,255);
  2794.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2795.         m_pRenderer->SetAmbient(0,0,200,255);
  2796.     }
  2797.     else
  2798.     {
  2799.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2800.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2801.     }
  2802.  
  2803.     Tmp = pTrans->Translate("Join Game");
  2804.     lY = usCenterY+40;
  2805.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2806.     {
  2807.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2808.         m_pRenderer->SetAmbient(200,0,0,255);
  2809.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2810.         m_pRenderer->SetAmbient(0,0,200,255);
  2811.     }
  2812.     else
  2813.     {
  2814.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2815.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2816.     }
  2817.  
  2818.     Tmp = pTrans->Translate("Cancel");
  2819.     lY = usCenterY+180;
  2820.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  2821.     {
  2822.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  2823.         m_pRenderer->SetAmbient(200,0,0,255);
  2824.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  2825.         m_pRenderer->SetAmbient(0,0,200,255);
  2826.     }
  2827.     else
  2828.     {
  2829.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2830.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2831.     }
  2832.  
  2833.     m_pRenderer->DisableBlending();
  2834. }
  2835.  
  2836. void FRApp::RenderServerMenu(void)
  2837. {
  2838.     UInt32 ulMouseX, ulMouseY;
  2839.     Int32 lX, lY;
  2840.     UInt16 usCenterX, usCenterY;
  2841.     TETranslator* pTrans = TETranslator::GetTranslator();
  2842.     TEString Tmp;
  2843.     Char acTmp[32];
  2844.     Char acArrowLeft[2] = {17,'\0'};
  2845.     Char acArrowRight[2] = {16,'\0'};
  2846.  
  2847.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  2848.  
  2849.     usCenterX = m_usScreenWidth / 2;
  2850.     usCenterY = m_usScreenHeight / 2;
  2851.  
  2852.     m_pRenderer->EnableBlending();
  2853.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  2854.  
  2855.     m_pRenderer->SetAmbient(255,255,255,255);
  2856.     m_pRenderer->SetTexture(m_pMenuBackground);
  2857.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  2858.  
  2859.     m_pRenderer->SetAmbient(0,0,200,255);
  2860.  
  2861.     Tmp = GetGameTypeName(m_CurrGameType);;
  2862.     Tmp.MakeUpperCase();
  2863.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2864.     lY = usCenterY - 95;
  2865.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2866.  
  2867.     lY = usCenterY-95;
  2868.     lX = usCenterX-180;
  2869.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2870.     {
  2871.         m_pRenderer->SetAmbient(200,0,0,255);
  2872.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2873.         m_pRenderer->SetAmbient(0,0,200,255);
  2874.  
  2875.     }
  2876.     else
  2877.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2878.  
  2879.     lY = usCenterY-95;
  2880.     lX = usCenterX+180;
  2881.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2882.     {
  2883.         m_pRenderer->SetAmbient(200,0,0,255);
  2884.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2885.         m_pRenderer->SetAmbient(0,0,200,255);
  2886.  
  2887.     }
  2888.     else
  2889.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2890.  
  2891.     Tmp = pTrans->Translate("Car:");
  2892.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2893.     lY = usCenterY - 70;
  2894.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2895.  
  2896.     Tmp = GetCarName(m_CurrCar);
  2897.     Tmp.MakeUpperCase();
  2898.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2899.     lY = usCenterY - 50;
  2900.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2901.  
  2902.     lY = usCenterY-50;
  2903.     lX = usCenterX-180;
  2904.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2905.     {
  2906.         m_pRenderer->SetAmbient(200,0,0,255);
  2907.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2908.         m_pRenderer->SetAmbient(0,0,200,255);
  2909.  
  2910.     }
  2911.     else
  2912.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2913.  
  2914.     lY = usCenterY-50;
  2915.     lX = usCenterX+180;
  2916.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2917.     {
  2918.         m_pRenderer->SetAmbient(200,0,0,255);
  2919.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2920.         m_pRenderer->SetAmbient(0,0,200,255);
  2921.  
  2922.     }
  2923.     else
  2924.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2925.  
  2926.  
  2927.     Tmp = pTrans->Translate("Laps:");
  2928.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2929.     lY = usCenterY - 25;
  2930.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2931.  
  2932.     sprintf(acTmp, "%d", m_ulNumLaps);
  2933.     Tmp = acTmp;
  2934.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2935.     lY = usCenterY - 5;
  2936.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2937.  
  2938.     lY = usCenterY-5;
  2939.     lX = usCenterX-180;
  2940.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2941.     {
  2942.         m_pRenderer->SetAmbient(200,0,0,255);
  2943.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2944.         m_pRenderer->SetAmbient(0,0,200,255);
  2945.  
  2946.     }
  2947.     else
  2948.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2949.  
  2950.     lY = usCenterY-5;
  2951.     lX = usCenterX+180;
  2952.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2953.     {
  2954.         m_pRenderer->SetAmbient(200,0,0,255);
  2955.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2956.         m_pRenderer->SetAmbient(0,0,200,255);
  2957.  
  2958.     }
  2959.     else
  2960.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2961.  
  2962.  
  2963.     Tmp = pTrans->Translate("Track:");
  2964.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2965.     lY = usCenterY + 20;
  2966.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2967.  
  2968.     Tmp = ms_aacTrackNames[m_ulCurrTrack];
  2969.     Tmp.MakeUpperCase();
  2970.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  2971.     lY = usCenterY + 40;
  2972.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  2973.  
  2974.     lY = usCenterY+40;
  2975.     lX = usCenterX-180;
  2976.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  2977.     {
  2978.         m_pRenderer->SetAmbient(200,0,0,255);
  2979.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  2980.         m_pRenderer->SetAmbient(0,0,200,255);
  2981.  
  2982.     }
  2983.     else
  2984.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  2985.  
  2986.     lY = usCenterY+40;
  2987.     lX = usCenterX+180;
  2988.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  2989.     {
  2990.         m_pRenderer->SetAmbient(200,0,0,255);
  2991.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  2992.         m_pRenderer->SetAmbient(0,0,200,255);
  2993.  
  2994.     }
  2995.     else
  2996.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  2997.  
  2998.     Tmp = "Net Port:";
  2999.     lY = usCenterY+90;
  3000.     lX = usCenterX-250;
  3001.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3002.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3003.     {
  3004.         sprintf(acTmp, "%d_", m_usNetPort);
  3005.         m_pRenderer->SetAmbient(200,0,0,255);
  3006.         m_pRenderer->DrawText(usCenterX, lY-1, 18, acTmp);
  3007.         m_pRenderer->SetAmbient(0,0,200,255);
  3008.     }
  3009.     else
  3010.     {
  3011.         sprintf(acTmp, "%d", m_usNetPort);
  3012.         m_pRenderer->DrawText(usCenterX, lY, 16, acTmp);
  3013.     }
  3014.  
  3015.     Tmp = pTrans->Translate("Server Password:");
  3016.     lY = usCenterY+120;
  3017.     lX = usCenterX-250;
  3018.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3019.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3020.     {
  3021.         if(m_ServerPassword.GetLength() != 0)
  3022.             Tmp = m_ServerPassword + "_";
  3023.         else Tmp = "_";
  3024.         m_pRenderer->SetAmbient(200,0,0,255);
  3025.         m_pRenderer->DrawText(usCenterX, lY-1, 18, Tmp);
  3026.         m_pRenderer->SetAmbient(0,0,200,255);
  3027.     }
  3028.     else if(m_ServerPassword.GetLength() != 0)
  3029.         m_pRenderer->DrawText(usCenterX, lY, 16, m_ServerPassword);
  3030.  
  3031.     Tmp = pTrans->Translate("Cancel");
  3032.     lY = usCenterY+180;
  3033.     lX = usCenterX - (UInt16) (Tmp.GetLength() * 15.3f);
  3034.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3035.         (Int32) ulMouseX < usCenterX)
  3036.     {
  3037.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3038.         m_pRenderer->SetAmbient(200,0,0,255);
  3039.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3040.         m_pRenderer->SetAmbient(0,0,200,255);
  3041.     }
  3042.     else
  3043.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3044.  
  3045.     Tmp = pTrans->Translate("Begin Hosting");
  3046.     lY = usCenterY+180;
  3047.     lX = usCenterX+10;
  3048.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3049.         (Int32) ulMouseX > usCenterX)
  3050.     {
  3051.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3052.         m_pRenderer->SetAmbient(200,0,0,255);
  3053.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3054.         m_pRenderer->SetAmbient(0,0,200,255);
  3055.     }
  3056.     else
  3057.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3058.  
  3059.     m_pRenderer->DisableBlending();
  3060. }
  3061.  
  3062. void FRApp::RenderClientMenu(void)
  3063. {
  3064.     UInt32 ulMouseX, ulMouseY;
  3065.     Int32 lX, lY;
  3066.     UInt16 usCenterX, usCenterY;
  3067.     TETranslator* pTrans = TETranslator::GetTranslator();
  3068.     TEString Tmp;
  3069.     Char acTmp[32];
  3070.     Char acArrowLeft[2] = {17,'\0'};
  3071.     Char acArrowRight[2] = {16,'\0'};
  3072.  
  3073.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3074.  
  3075.     usCenterX = m_usScreenWidth / 2;
  3076.     usCenterY = m_usScreenHeight / 2;
  3077.  
  3078.     m_pRenderer->EnableBlending();
  3079.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3080.  
  3081.     m_pRenderer->SetAmbient(255,255,255,255);
  3082.     m_pRenderer->SetTexture(m_pMenuBackground);
  3083.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  3084.  
  3085.     m_pRenderer->SetAmbient(0,0,200,255);
  3086.  
  3087.     Tmp = pTrans->Translate("Car:");
  3088.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3089.     lY = usCenterY - 70;
  3090.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3091.  
  3092.     Tmp = GetCarName(m_CurrCar);
  3093.     Tmp.MakeUpperCase();
  3094.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3095.     lY = usCenterY - 40;
  3096.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3097.  
  3098.     lX = usCenterX-180;
  3099.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  3100.     {
  3101.         m_pRenderer->SetAmbient(200,0,0,255);
  3102.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  3103.         m_pRenderer->SetAmbient(0,0,200,255);
  3104.  
  3105.     }
  3106.     else
  3107.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  3108.  
  3109.     lX = usCenterX+180;
  3110.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  3111.     {
  3112.         m_pRenderer->SetAmbient(200,0,0,255);
  3113.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  3114.         m_pRenderer->SetAmbient(0,0,200,255);
  3115.  
  3116.     }
  3117.     else
  3118.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  3119.  
  3120.     Tmp = "Server IP:";
  3121.     lY = usCenterY+40;
  3122.     lX = usCenterX-250;
  3123.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3124.     sprintf(acTmp, "    .     .     .");
  3125.     m_pRenderer->DrawText(usCenterX, lY, 16, acTmp);
  3126.     sprintf(acTmp, "%d", m_IP.aucAddress[0]);
  3127.     m_pRenderer->DrawText(usCenterX, lY, 16, acTmp);
  3128.     sprintf(acTmp, "%d", m_IP.aucAddress[1]);
  3129.     m_pRenderer->DrawText(usCenterX+78, lY, 16, acTmp);
  3130.     sprintf(acTmp, "%d", m_IP.aucAddress[2]);
  3131.     m_pRenderer->DrawText(usCenterX+156, lY, 16, acTmp);
  3132.     sprintf(acTmp, "%d", m_IP.aucAddress[3]);
  3133.     m_pRenderer->DrawText(usCenterX+234, lY, 16, acTmp);
  3134.  
  3135.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3136.     {
  3137.         m_pRenderer->SetAmbient(200,0,0,255);
  3138.  
  3139.         if(ulMouseX >= (UInt32) usCenterX && ulMouseX <= (UInt32) usCenterX + 39)
  3140.         {
  3141.             sprintf(acTmp, "%d_", m_IP.aucAddress[0]);
  3142.             m_pRenderer->DrawText(usCenterX, lY, 16, acTmp);
  3143.         }
  3144.         else if(ulMouseX >= (UInt32) usCenterX+78 && ulMouseX <= (UInt32) usCenterX + 117)
  3145.         {
  3146.             sprintf(acTmp, "%d_", m_IP.aucAddress[1]);
  3147.             m_pRenderer->DrawText(usCenterX+78, lY, 16, acTmp);
  3148.         }
  3149.         else if(ulMouseX >= (UInt32) usCenterX+156 && ulMouseX <= (UInt32) usCenterX + 195)
  3150.         {
  3151.             sprintf(acTmp, "%d_", m_IP.aucAddress[2]);
  3152.             m_pRenderer->DrawText(usCenterX+156, lY, 16, acTmp);
  3153.         }
  3154.         else if(ulMouseX >= (UInt32) usCenterX+234 && ulMouseX <= (UInt32) usCenterX + 273)
  3155.         {
  3156.             sprintf(acTmp, "%d_", m_IP.aucAddress[3]);
  3157.             m_pRenderer->DrawText(usCenterX+234, lY, 16, acTmp);
  3158.         }
  3159.             
  3160.         m_pRenderer->SetAmbient(0,0,200,255);
  3161.     }
  3162.  
  3163.     Tmp = "Net Port:";
  3164.     lY = usCenterY+70;
  3165.     lX = usCenterX-250;
  3166.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3167.     sprintf(acTmp, "%d", m_usNetPort);
  3168.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3169.     {
  3170.         sprintf(acTmp, "%d_", m_usNetPort);
  3171.         m_pRenderer->SetAmbient(200,0,0,255);
  3172.         m_pRenderer->DrawText(usCenterX, lY, 16, acTmp);
  3173.         m_pRenderer->SetAmbient(0,0,200,255);
  3174.     }
  3175.     else
  3176.     {
  3177.         sprintf(acTmp, "%d", m_usNetPort);
  3178.         m_pRenderer->DrawText(usCenterX, lY, 16, acTmp);
  3179.     }
  3180.  
  3181.     Tmp = pTrans->Translate("Server Password:");
  3182.     lY = usCenterY+100;
  3183.     lX = usCenterX-250;
  3184.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3185.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3186.     {
  3187.         if(m_ServerPassword.GetLength() != 0)
  3188.             Tmp = m_ServerPassword + "_";
  3189.         else Tmp = "_";
  3190.         m_pRenderer->SetAmbient(200,0,0,255);
  3191.         m_pRenderer->DrawText(usCenterX, lY-1, 18, Tmp);
  3192.         m_pRenderer->SetAmbient(0,0,200,255);
  3193.     }
  3194.     else if(m_ServerPassword.GetLength() != 0)
  3195.         m_pRenderer->DrawText(usCenterX, lY, 16, m_ServerPassword);
  3196.  
  3197.     Tmp = pTrans->Translate("Cancel");
  3198.     lY = usCenterY+160;
  3199.     lX = usCenterX - 10 - (UInt16) (Tmp.GetLength() * 15.3f);
  3200.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3201.         (Int32) ulMouseX < usCenterX)
  3202.     {
  3203.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3204.         m_pRenderer->SetAmbient(200,0,0,255);
  3205.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3206.         m_pRenderer->SetAmbient(0,0,200,255);
  3207.     }
  3208.     else
  3209.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3210.  
  3211.     Tmp = pTrans->Translate("Connect");
  3212.     lX = usCenterX+10;
  3213.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3214.         (Int32) ulMouseX > usCenterX)
  3215.     {
  3216.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3217.         m_pRenderer->SetAmbient(200,0,0,255);
  3218.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3219.         m_pRenderer->SetAmbient(0,0,200,255);
  3220.     }
  3221.     else
  3222.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3223.  
  3224.     m_pRenderer->DisableBlending();
  3225. }
  3226.  
  3227. void FRApp::RenderWaitingForServer(void)
  3228. {
  3229.     if(!m_bConnectedToServer)
  3230.     {
  3231.         m_GameState = CLIENTMENU;
  3232.         return;
  3233.     }
  3234.  
  3235.     UInt32 ulMouseX, ulMouseY;
  3236.     Int32 lX, lY;
  3237.     UInt16 usCenterX, usCenterY;
  3238.     TETranslator* pTrans = TETranslator::GetTranslator();
  3239.     TEString Tmp;
  3240.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  3241.  
  3242.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3243.  
  3244.     usCenterX = m_usScreenWidth / 2;
  3245.     usCenterY = m_usScreenHeight / 2;
  3246.  
  3247.     m_pRenderer->EnableBlending();
  3248.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3249.  
  3250.     m_pRenderer->SetAmbient(255,255,255,255);
  3251.     m_pRenderer->SetTexture(m_pMenuBackground);
  3252.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  3253.  
  3254.     m_pRenderer->SetAmbient(0,0,200,255);
  3255.  
  3256.     Tmp = pTrans->Translate("Waiting for server");
  3257.     lY = usCenterY-8;
  3258.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3259.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3260.  
  3261.     Tmp = pTrans->Translate("Cancel");
  3262.     lY = usCenterY+190;
  3263.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3264.     {
  3265.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  3266.         m_pRenderer->SetAmbient(200,0,0,255);
  3267.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  3268.  
  3269.         if(bMouseButton)
  3270.         {
  3271.             m_GameState = MAINMENU;
  3272.             m_pNetworkManager->EndClient();
  3273.             UnloadBSPFile();
  3274.         }
  3275.     }
  3276.     else
  3277.     {
  3278.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3279.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3280.     }
  3281.  
  3282.     m_pRenderer->DisableBlending();
  3283. }
  3284.  
  3285. void FRApp::RenderWaitingForClients(void)
  3286. {
  3287.     UInt32 ulMouseX, ulMouseY;
  3288.     Int32 lX, lY;
  3289.     UInt16 usCenterX, usCenterY;
  3290.     TETranslator* pTrans = TETranslator::GetTranslator();
  3291.     TEString Tmp;
  3292.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  3293.  
  3294.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3295.  
  3296.     usCenterX = m_usScreenWidth / 2;
  3297.     usCenterY = m_usScreenHeight / 2;
  3298.  
  3299.     m_pRenderer->EnableBlending();
  3300.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3301.  
  3302.     m_pRenderer->SetAmbient(255,255,255,255);
  3303.     m_pRenderer->SetTexture(m_pMenuBackground);
  3304.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  3305.  
  3306.     m_pRenderer->SetAmbient(0,0,200,255);
  3307.  
  3308.     Tmp = pTrans->Translate("Clients connected:");
  3309.     lY = usCenterY-100;
  3310.     lX = usCenterX-300;
  3311.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3312.  
  3313.     Tmp = pTrans->Translate("Car:");
  3314.     lX = usCenterX+30;
  3315.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3316.  
  3317.     lX = usCenterX+250;
  3318.     m_pRenderer->DrawText(lX, lY, 16, "Ping:");
  3319.     
  3320.     for(UInt32 ulCount = 0; ulCount < m_ulNumClients; ulCount++)
  3321.     {
  3322.         Char acPing[8];
  3323.  
  3324.         if(m_abClientReady[ulCount])
  3325.             sprintf(acPing, "%d", m_apClients[ulCount]->ulLastPing);
  3326.         else sprintf(acPing, TETranslator::GetTranslator()->Translate("Wait").Get());
  3327.         lY += 20;
  3328.  
  3329.         m_pRenderer->DrawText(usCenterX-300, lY, 16, m_apClients[ulCount]->acName);
  3330.  
  3331.  
  3332.         if(m_abClientReady[ulCount])
  3333.             Tmp = GetCarName(m_aClientCars[ulCount]);
  3334.         else Tmp = acPing;
  3335.  
  3336.         m_pRenderer->DrawText(usCenterX+30, lY, 16, Tmp);
  3337.         m_pRenderer->DrawText(usCenterX+250, lY, 16, acPing);
  3338.     }
  3339.  
  3340.     Tmp = pTrans->Translate("Cancel");
  3341.     lY = usCenterY+180;
  3342.     lX = usCenterX - 10 - (UInt16) (Tmp.GetLength() * 15.3f);
  3343.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3344.         (Int32) ulMouseX < usCenterX)
  3345.     {
  3346.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3347.         m_pRenderer->SetAmbient(200,0,0,255);
  3348.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3349.         m_pRenderer->SetAmbient(0,0,200,255);
  3350.  
  3351.         if(bMouseButton)
  3352.         {
  3353.             m_GameState = MAINMENU;
  3354.             m_pNetworkManager->EndServer();
  3355.             UnloadBSPFile();
  3356.         }
  3357.     }
  3358.     else
  3359.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3360.  
  3361.     Tmp = pTrans->Translate("Start Race");
  3362.     lY = usCenterY+180;
  3363.     lX = usCenterX+10;
  3364.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3365.         (Int32) ulMouseX > usCenterX)
  3366.     {
  3367.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3368.         m_pRenderer->SetAmbient(200,0,0,255);
  3369.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3370.         m_pRenderer->SetAmbient(0,0,200,255);
  3371.  
  3372.         if(bMouseButton && m_ulNumClients > 0)
  3373.         {
  3374.             FRPlayerInfo PlayerInfo;
  3375.             UInt32 ulCount;
  3376.             bool bAllReady = true;
  3377.  
  3378.             for(ulCount = 0; ulCount < m_ulNumClients; ulCount++)
  3379.             {
  3380.                 if(!m_abClientReady[ulCount])
  3381.                 {
  3382.                     bAllReady = false;
  3383.                     break;
  3384.                 }
  3385.             }
  3386.  
  3387.             if(bAllReady)
  3388.             {
  3389.                 TENetworkManager::ms_bRefuseConnection = true;
  3390.  
  3391.                 PlayerInfo.ulMsgType = FRPLAYERINFO;
  3392.                 PlayerInfo.ulNumPlayers = m_ulNumClients+1;
  3393.                 PlayerInfo.aCars[0] = m_CurrCar;
  3394.                 PlayerInfo.aCars[1] = PlayerInfo.aCars[2] = PlayerInfo.aCars[3] = ACLASS;
  3395.                 sprintf(PlayerInfo.aPlayerNames[0], m_PlayerName.Get());
  3396.                 sprintf(PlayerInfo.aPlayerNames[1], " ");
  3397.                 sprintf(PlayerInfo.aPlayerNames[2], " ");
  3398.                 sprintf(PlayerInfo.aPlayerNames[3], " ");
  3399.                 
  3400.                 for(ulCount = 0; ulCount < m_ulNumClients; ulCount++)
  3401.                 {
  3402.                     sprintf(PlayerInfo.aPlayerNames[1+ulCount], m_apClients[ulCount]->acName);
  3403.                     PlayerInfo.aCars[1+ulCount] = m_aClientCars[ulCount];
  3404.                 }
  3405.                 
  3406.  
  3407.                 for(ulCount = 0; ulCount < m_ulNumClients; ulCount++)
  3408.                 {
  3409.                     PlayerInfo.ulOwnPos = ulCount+1;
  3410.                     m_pNetworkManager->SendDataToClient(m_apClients[ulCount]->ulID, &PlayerInfo, sizeof(PlayerInfo));
  3411.                 }
  3412.                 
  3413.                 m_bCareerRace = false;
  3414.                 StartNetworkRace();
  3415.             }
  3416.         }
  3417.     }
  3418.     else
  3419.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3420.  
  3421.     m_pRenderer->DisableBlending();
  3422. }
  3423.  
  3424. void FRApp::RenderCredits(void)
  3425. {
  3426.     UInt32 ulMouseX, ulMouseY;
  3427.     Int32 lX, lY;
  3428.     UInt16 usCenterX, usCenterY;
  3429.     TETranslator* pTrans = TETranslator::GetTranslator();
  3430.     TEString Tmp;
  3431.     bool bMouseButton = m_pInputDevices->IsPressed(TE_MOUSE_BUTTON0);
  3432.  
  3433.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3434.  
  3435.     usCenterX = m_usScreenWidth / 2;
  3436.     usCenterY = m_usScreenHeight / 2;
  3437.  
  3438.     m_pRenderer->EnableBlending();
  3439.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3440.  
  3441.     m_pRenderer->SetAmbient(255,255,255,255);
  3442.     m_pRenderer->SetTexture(m_pMenuBackground);
  3443.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  3444.  
  3445.     m_pRenderer->SetAmbient(0,0,200,255);
  3446.  
  3447.     Tmp = pTrans->Translate("Programming/Graphics/Idea");
  3448.     lY = usCenterY-50;
  3449.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3450.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3451.     
  3452.     Tmp = pTrans->Translate("Music");
  3453.     lY = usCenterY+10;
  3454.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3455.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3456.     
  3457.     Tmp = pTrans->Translate("Fun Racing uses");
  3458.     lY = usCenterY+70;
  3459.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3460.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3461.  
  3462.     Tmp = pTrans->Translate("the TriNiTy Engine by Stefan Stattelmann");
  3463.     lY = usCenterY+90;
  3464.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3465.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3466.  
  3467.     Tmp = pTrans->Translate("Done");
  3468.     lY = usCenterY+160;
  3469.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18)
  3470.     {
  3471.         lX = usCenterX - (Int32) (Tmp.GetLength() * 7.65f);
  3472.         m_pRenderer->SetAmbient(200,0,0,255);
  3473.         m_pRenderer->DrawText(lX, lY-1, 18, Tmp);
  3474.  
  3475.         if(bMouseButton)
  3476.         {
  3477.             SaveConfig();
  3478.             m_GameState = MAINMENU;
  3479.         }
  3480.     }
  3481.     else
  3482.     {
  3483.         lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3484.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3485.     }
  3486.     
  3487.     m_pRenderer->SetAmbient(0,100,0,255);
  3488.  
  3489.     Tmp = "http://www.funracing.de.vu";
  3490.     lY = usCenterY-80;
  3491.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3492.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3493.  
  3494.     Tmp = "Stefan Stattelmann";
  3495.     lY = usCenterY-30;
  3496.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3497.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3498.  
  3499.     Tmp = "Martin Priess";
  3500.     lY = usCenterY+30;
  3501.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3502.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3503.  
  3504.     m_pRenderer->DisableBlending();
  3505. }
  3506.  
  3507. void FRApp::RenderInGameMenuServer(void)
  3508. {
  3509.  
  3510.     UInt32 ulMouseX, ulMouseY;
  3511.     Int32 lX, lY;
  3512.     UInt16 usCenterX, usCenterY;
  3513.     TETranslator* pTrans = TETranslator::GetTranslator();
  3514.     TEString Tmp;
  3515.     Char acTmp[32];
  3516.     Char acArrowLeft[2] = {17,'\0'};
  3517.     Char acArrowRight[2] = {16,'\0'};
  3518.  
  3519.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3520.  
  3521.     usCenterX = m_usScreenWidth / 2;
  3522.     usCenterY = m_usScreenHeight / 2;
  3523.  
  3524. //    m_pRenderer->EnableBlending();
  3525. //    m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3526.  
  3527.     m_pRenderer->SetAmbient(0,0,0);
  3528.     m_pRenderer->SetTexture(NULL);
  3529.     m_pRenderer->DrawRectangle(usCenterX - 200, usCenterY - 95, usCenterX + 200,  usCenterY + 130);
  3530.  
  3531.     m_pRenderer->SetAmbient(0,0,200,255);
  3532.  
  3533.     Tmp = GetGameTypeName(m_CurrGameType);;
  3534.     Tmp.MakeUpperCase();
  3535.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3536.     lY = usCenterY - 75;
  3537.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3538.  
  3539.     lX = usCenterX-180;
  3540.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  3541.     {
  3542.         m_pRenderer->SetAmbient(200,0,0,255);
  3543.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  3544.         m_pRenderer->SetAmbient(0,0,200,255);
  3545.  
  3546.     }
  3547.     else
  3548.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  3549.  
  3550.     lX = usCenterX+180;
  3551.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  3552.     {
  3553.         m_pRenderer->SetAmbient(200,0,0,255);
  3554.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  3555.         m_pRenderer->SetAmbient(0,0,200,255);
  3556.  
  3557.     }
  3558.     else
  3559.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  3560.  
  3561.     Tmp = pTrans->Translate("Car:");
  3562.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3563.     lY = usCenterY - 50;
  3564.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3565.  
  3566.     Tmp = GetCarName(m_CurrCar);
  3567.     Tmp.MakeUpperCase();
  3568.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3569.     lY = usCenterY - 30;
  3570.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3571.  
  3572.     lX = usCenterX-180;
  3573.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  3574.     {
  3575.         m_pRenderer->SetAmbient(200,0,0,255);
  3576.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  3577.         m_pRenderer->SetAmbient(0,0,200,255);
  3578.  
  3579.     }
  3580.     else
  3581.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  3582.  
  3583.     lX = usCenterX+180;
  3584.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  3585.     {
  3586.         m_pRenderer->SetAmbient(200,0,0,255);
  3587.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  3588.         m_pRenderer->SetAmbient(0,0,200,255);
  3589.  
  3590.     }
  3591.     else
  3592.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  3593.  
  3594.  
  3595.     Tmp = pTrans->Translate("Laps:");
  3596.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3597.     lY = usCenterY - 5;
  3598.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3599.  
  3600.     sprintf(acTmp, "%d", m_ulNumLaps);
  3601.     Tmp = acTmp;
  3602.     lY = usCenterY + 15;
  3603.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3604.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3605.  
  3606.     lX = usCenterX-180;
  3607.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  3608.     {
  3609.         m_pRenderer->SetAmbient(200,0,0,255);
  3610.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  3611.         m_pRenderer->SetAmbient(0,0,200,255);
  3612.  
  3613.     }
  3614.     else
  3615.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  3616.     lX = usCenterX+180;
  3617.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  3618.     {
  3619.         m_pRenderer->SetAmbient(200,0,0,255);
  3620.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  3621.         m_pRenderer->SetAmbient(0,0,200,255);
  3622.  
  3623.     }
  3624.     else
  3625.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  3626.  
  3627.  
  3628.     Tmp = pTrans->Translate("Track:");
  3629.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3630.     lY = usCenterY + 40;
  3631.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3632.  
  3633.     Tmp = ms_aacTrackNames[m_ulCurrTrack];
  3634.     Tmp.MakeUpperCase();
  3635.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3636.     lY = usCenterY + 60;
  3637.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3638.  
  3639.     lX = usCenterX-180;
  3640.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  3641.     {
  3642.         m_pRenderer->SetAmbient(200,0,0,255);
  3643.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  3644.         m_pRenderer->SetAmbient(0,0,200,255);
  3645.  
  3646.     }
  3647.     else
  3648.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  3649.  
  3650.     lX = usCenterX+180;
  3651.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  3652.     {
  3653.         m_pRenderer->SetAmbient(200,0,0,255);
  3654.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  3655.         m_pRenderer->SetAmbient(0,0,200,255);
  3656.  
  3657.     }
  3658.     else
  3659.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  3660.  
  3661.  
  3662.     Tmp = pTrans->Translate("Quit");
  3663.     lY = usCenterY+100;
  3664.     lX = usCenterX - 60 - (UInt16) (Tmp.GetLength() * 15.3f);
  3665.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3666.         (Int32) ulMouseX < usCenterX - 60)
  3667.     {
  3668.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3669.         m_pRenderer->SetAmbient(200,0,0,255);
  3670.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3671.         m_pRenderer->SetAmbient(0,0,200,255);
  3672.     }
  3673.     else
  3674.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3675.  
  3676.     Tmp = pTrans->Translate("Restart");
  3677.     lX = usCenterX - (UInt16) (Tmp.GetLength() * 7.65f);
  3678.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3679.         (Int32) ulMouseX < usCenterX + 60 && (Int32) ulMouseX > usCenterX - 60)
  3680.     {
  3681.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3682.         m_pRenderer->SetAmbient(200,0,0,255);
  3683.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3684.         m_pRenderer->SetAmbient(0,0,200,255);
  3685.     }
  3686.     else
  3687.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3688.  
  3689.     Tmp = pTrans->Translate("Resume");
  3690.     lX = usCenterX+60;
  3691.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3692.         (Int32) ulMouseX > usCenterX + 60)
  3693.     {
  3694.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3695.         m_pRenderer->SetAmbient(200,0,0,255);
  3696.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3697.         m_pRenderer->SetAmbient(0,0,200,255);
  3698.     }
  3699.     else
  3700.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3701.  
  3702. //    m_pRenderer->DisableBlending();
  3703. }
  3704.  
  3705. void FRApp::RenderInGameMenuClient(void)
  3706. {
  3707.     UInt32 ulMouseX, ulMouseY;
  3708.     Int32 lX, lY;
  3709.     UInt16 usCenterX, usCenterY;
  3710.     TETranslator* pTrans = TETranslator::GetTranslator();
  3711.     TEString Tmp;
  3712.     Char acArrowLeft[2] = {17,'\0'};
  3713.     Char acArrowRight[2] = {16,'\0'};
  3714.  
  3715.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3716.  
  3717.     usCenterX = m_usScreenWidth / 2;
  3718.     usCenterY = m_usScreenHeight / 2;
  3719.  
  3720. //    m_pRenderer->EnableBlending();
  3721. //    m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3722.  
  3723.     m_pRenderer->SetAmbient(0,0,0);
  3724.     m_pRenderer->SetTexture(NULL);
  3725.     m_pRenderer->DrawRectangle(usCenterX - 200, usCenterY - 40, usCenterX + 200,  usCenterY + 90);
  3726.  
  3727.     m_pRenderer->SetAmbient(0,0,200,255);
  3728.  
  3729.     Tmp = pTrans->Translate("Car:");
  3730.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3731.     lY = usCenterY - 30;
  3732.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3733.  
  3734.     Tmp = GetCarName(m_CurrCar);
  3735.     Tmp.MakeUpperCase();
  3736.     lX = usCenterX - (Int32) (Tmp.GetLength() * 6.8f);
  3737.     lY = usCenterY;
  3738.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3739.  
  3740.     lX = usCenterX-180;
  3741.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX <= usCenterX - 165)
  3742.     {
  3743.         m_pRenderer->SetAmbient(200,0,0,255);
  3744.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowLeft);
  3745.         m_pRenderer->SetAmbient(0,0,200,255);
  3746.  
  3747.     }
  3748.     else
  3749.         m_pRenderer->DrawText(lX, lY, 16, acArrowLeft);
  3750.  
  3751.     lX = usCenterX+180;
  3752.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 && (Int32) ulMouseX >= usCenterX + 165)
  3753.     {
  3754.         m_pRenderer->SetAmbient(200,0,0,255);
  3755.         m_pRenderer->DrawText(lX-1, lY-1, 18, acArrowRight);
  3756.         m_pRenderer->SetAmbient(0,0,200,255);
  3757.  
  3758.     }
  3759.     else
  3760.         m_pRenderer->DrawText(lX, lY, 16, acArrowRight);
  3761.  
  3762.  
  3763.  
  3764.     Tmp = pTrans->Translate("Quit");
  3765.     lY = usCenterY+60;
  3766.     lX = usCenterX - 50 - (UInt16) (Tmp.GetLength() * 15.3f);
  3767.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3768.         (Int32) ulMouseX < usCenterX - 50)
  3769.     {
  3770.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3771.         m_pRenderer->SetAmbient(200,0,0,255);
  3772.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3773.         m_pRenderer->SetAmbient(0,0,200,255);
  3774.     }
  3775.     else
  3776.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3777.  
  3778.     Tmp = pTrans->Translate("Resume");
  3779.     lX = usCenterX+50;
  3780.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3781.         (Int32) ulMouseX > usCenterX + 50)
  3782.     {
  3783.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3784.         m_pRenderer->SetAmbient(200,0,0,255);
  3785.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3786.         m_pRenderer->SetAmbient(0,0,200,255);
  3787.     }
  3788.     else
  3789.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3790.  
  3791. //    m_pRenderer->DisableBlending();
  3792. }
  3793.  
  3794. void FRApp::RenderStatistic(void)
  3795. {
  3796.     UInt32 ulMouseX, ulMouseY, ulCount, ulCount2;
  3797.     Int32 lX, lY;
  3798.     TETranslator* pTrans = TETranslator::GetTranslator();
  3799.     UInt16 usCenterX, usCenterY;
  3800.     TEString Tmp;
  3801.     Char acTmp[32];
  3802.     UChar ucPos[4];
  3803.     
  3804.     ucPos[0] = 0;
  3805.     ucPos[1] = 1;
  3806.     ucPos[2] = 2;
  3807.     ucPos[3] = 3;
  3808.  
  3809.     m_pInputDevices->GetCursorPos(ulMouseX, ulMouseY);
  3810.  
  3811.     usCenterX = m_usScreenWidth / 2;
  3812.     usCenterY = m_usScreenHeight / 2;
  3813.  
  3814.     m_pRenderer->EnableBlending();
  3815.     m_pRenderer->SetBlendingState(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
  3816.  
  3817.     m_pRenderer->SetAmbient(255,255,255,255);
  3818.     m_pRenderer->SetTexture(m_pMenuBackground);
  3819.     m_pRenderer->DrawRectanglef(0.0f, 0.0f, 1.0f, 1.0f);
  3820.  
  3821.     m_pRenderer->SetAmbient(0,100,0,255);
  3822.  
  3823.     lX = usCenterX - 180;
  3824.     for(ulCount = 0; ulCount < 4; ulCount++)
  3825.     {
  3826.         sprintf(acTmp, "%d. ", m_pCareer->aulDriverPlacement[ulCount]+1);
  3827.         Tmp = acTmp;
  3828.         
  3829.         if(ulCount == 3)
  3830.             Tmp = Tmp + m_PlayerName;
  3831.         else Tmp = Tmp + ms_aOpponents[m_pCareer->aulOpponents[ulCount]].m_Name;
  3832.         
  3833.         lY = usCenterY-62 + 18 * m_pCareer->aulDriverPlacement[ulCount];
  3834.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3835.  
  3836.         for(ulCount2 = ulCount+1; ulCount2 < 4; ulCount2++)
  3837.         {
  3838.             if(m_pCareer->aulDriverScore[ucPos[ulCount]] < m_pCareer->aulDriverScore[ucPos[ulCount2]])
  3839.             {
  3840.                 UChar ucBuf = ucPos[ulCount];
  3841.  
  3842.                 ucPos[ulCount] = ucPos[ulCount2];
  3843.                 ucPos[ulCount2] = ucBuf;
  3844.             }
  3845.         }
  3846.     }
  3847.  
  3848.     for(ulCount = 0; ulCount < 4; ulCount++)
  3849.     {
  3850.         sprintf(acTmp, "%d. ", ulCount+1);
  3851.         Tmp = acTmp;
  3852.         
  3853.         if(ucPos[ulCount] == 3)
  3854.             Tmp = Tmp + m_PlayerName;
  3855.         else Tmp = Tmp + ms_aOpponents[m_pCareer->aulOpponents[ucPos[ulCount]]].m_Name;
  3856.         
  3857.         lX = usCenterX - 180;
  3858.         lY = usCenterY+50 + 18 * ulCount;
  3859.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3860.         
  3861.         sprintf(acTmp, " %000d", m_pCareer->aulDriverScore[ucPos[ulCount]]);
  3862.         Tmp = pTrans->Translate("Score:");
  3863.         Tmp = Tmp + acTmp;
  3864.         lX = usCenterX + 80;
  3865.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3866.     }
  3867.  
  3868.     m_pRenderer->SetAmbient(0,0,200,255);
  3869.  
  3870.     Tmp = ms_aRaces[m_pCareer->aulRaces[m_pCareer->ulCurrRace-1]].m_Title;
  3871.     Tmp = Tmp + "[" + GetGameTypeName(m_CurrGameType) + "]";
  3872.     lY = usCenterY-100;
  3873.     lX = usCenterX - (UInt16) (Tmp.GetLength() * 6.8f);
  3874.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3875.     
  3876.     Tmp = pTrans->Translate("Results:");
  3877.     lY = usCenterY-82;
  3878.     lX = usCenterX - 180;
  3879.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3880.  
  3881.     Tmp = pTrans->Translate("Season Results after ");
  3882.     sprintf(acTmp, "%d ", m_pCareer->ulCurrRace);
  3883.     Tmp = Tmp + acTmp + pTrans->Translate("of 10 races");
  3884.     lY = usCenterY+30;
  3885.     lX = usCenterX - (UInt16) (Tmp.GetLength() * 6.8f);
  3886.     m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3887.  
  3888.     if(m_pCareer->ulCurrRace == 10)
  3889.     {
  3890.         m_pRenderer->SetAmbient(100,0,0,255);
  3891.         Tmp = pTrans->Translate("Season is over, press CONTINUE to start new one.");
  3892.         lY = usCenterY+120;
  3893.         lX = usCenterX - (UInt16) (Tmp.GetLength() * 6.8f);
  3894.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3895.  
  3896.  
  3897.         if(m_pCareer->usDifficulty >= 2 && m_pCareer->aulDriverScore[3] >= 90)
  3898.         {
  3899.             Tmp = pTrans->Translate("The bonus car (Monster Hummer) is now available.");
  3900.             lY = usCenterY+140;
  3901.             lX = usCenterX - (UInt16) (Tmp.GetLength() * 6.8f);
  3902.             m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3903.  
  3904.             m_bBonusCarAvailable = true;
  3905.         }
  3906.  
  3907.         m_pRenderer->SetAmbient(0,0,200,255);
  3908.     }
  3909.  
  3910.     Tmp = pTrans->Translate("Cancel");
  3911.     lY = usCenterY+160;
  3912.     lX = usCenterX - 10 - (UInt16) (Tmp.GetLength() * 15.3f);
  3913.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3914.         (Int32) ulMouseX < usCenterX)
  3915.     {
  3916.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3917.         m_pRenderer->SetAmbient(200,0,0,255);
  3918.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3919.         m_pRenderer->SetAmbient(0,0,200,255);
  3920.     }
  3921.     else
  3922.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3923.  
  3924.     Tmp = pTrans->Translate("Continue");
  3925.     lX = usCenterX+10;
  3926.     if((Int32) ulMouseY >= lY && (Int32) ulMouseY <= lY + 18 &&
  3927.         (Int32) ulMouseX > usCenterX)
  3928.     {
  3929.         lX -= (Int32) (Tmp.GetLength() * 0.17f);
  3930.         m_pRenderer->SetAmbient(200,0,0,255);
  3931.         m_pRenderer->DrawText(lX-2, lY-1, 18, Tmp);
  3932.         m_pRenderer->SetAmbient(0,0,200,255);
  3933.     }
  3934.     else
  3935.         m_pRenderer->DrawText(lX, lY, 16, Tmp);
  3936.  
  3937.     m_pRenderer->DisableBlending();
  3938. }
  3939.  
  3940.